package com.day30.test;

//服务器类的例子:

public class Test {
    public static void main(String[] args) {
        System.out.println("接口的体现 代理模式");
        
        //主要还是利用 接口和多态的设计 实现的
       //声明的是真是Server
        Server server =new Server();
        //把真是的Server扔进设计好的代理类中  利用了多态
        ProxyServer proxyServer= new ProxyServer(server);
        // 利用面向对象多态形式 传入的是哪个对象 实际他调用的是哪个对象的方法
        proxyServer.brwse();    
        //为什么不知道用Server 直接调用brwse 
        //因为在调用这个服务器的方法 之前也许需要做别的事  
        // 比如 互联网之前的检测 等等 所以把这个声明的服务器类传入代理类 执行一些别的方法
        // 然后顺带执行这个服务器的方法
        // 为什么不直接在这个服务器器把这个 互联网之前的检测 的方法定义好 ?
        // 答: 扩展性强
        // 比如现在又有一台服务器类 也需要做 互联网之前的检测 难道要在这个服务器类中再写一遍?
        // 所以说 可以把这些公共行为的方法 都可以写在一个类中 
        // 然后 哪个类想使用 就可以通过面向对象多态的形式 执行这个公共类中的方法 
        
        // 每针对一套的接口类 要设计一个代理类 
        // 这个是服务器操作一套代理类设计
        // 如果现在有个买菜的接口定义
        // 你不想直接去买 就可以根据买菜这一套 声明一个买菜的代理类 
        // 把你传入买菜代理类中 然后让这个代理类去执行 你想买菜的这个操作 也许买菜之前要有别的操作
        // 比如 检测 金钱是否充足 
    }

}

//网络
interface NetWork{
    void brwse();
}

//被代理类
class Server implements NetWork{

    @Override
    public void brwse() {
        // TODO Auto-generated method stub
        System.out.println("真是的服务器访问网络");
        
    }
    
}

//代理类
class ProxyServer implements NetWork{
    private NetWork work;
    
    public ProxyServer(NetWork work) {
        this.work=work;
    }
    
    void check(){
        System.out.println("互联网之前的校验");
    }

    @Override
    public void brwse() {
        // TODO Auto-generated method stub
        check();
        work.brwse();
        
    }
    
}

 

 

package com.day30.test;

//经纪人和明星的例子:
// 练习以下接口和多态的形式
public class StaticProxy {
   public static void main(String[] args) {
    Proxy proxy=new Proxy(new Actor());
    proxy.confer();
    proxy.signContract();
    proxy.bookTick();
    proxy.sing();
    proxy.takeMoney();
}
    
}

//声明一个接口 
//明星要做的事情
interface Star{
    void confer(); //面谈
    void signContract(); //签合同
    void bookTick(); //订票
    void sing();  //唱歌
    void takeMoney(); //收钱
}

class Actor implements Star{

    @Override
    public void confer() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void signContract() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void bookTick() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void sing() {
        // TODO Auto-generated method stub
        System.out.println("明星自己唱歌!!!");
        
    }

    @Override
    public void takeMoney() {
        // TODO Auto-generated method stub
        
    }
    
}

class Proxy implements Star{
    private Actor actor;
    
    public Proxy(Actor actor) {
        // TODO Auto-generated constructor stub
        this.actor=actor;
    }

    @Override
    public void confer() {
        // TODO Auto-generated method stub
        System.out.println("经纪人面谈");
        
    }

    @Override
    public void signContract() {
        // TODO Auto-generated method stub
        System.out.println("经纪人签合同");
        
    }

    @Override
    public void bookTick() {
        // TODO Auto-generated method stub
        System.out.println("经纪人订票");
    }

    @Override
    public void sing() {
        // TODO Auto-generated method stub
        actor.sing();
        
    }

    @Override
    public void takeMoney() {
        // TODO Auto-generated method stub
        System.out.println("经纪人收钱");
        
    }
    
}