五、 接口延伸出的代理模式

时间:2021-09-07 11:45:46

示例:

//  主题接口:定义了核心功能
interface Subject { 
    public abstract void eat();
}
// 核心主题:实现了主题接口,并且只实现核心功能
class  RealSubject implements Subject { 
    public void eat() {
        System.out.println("核心主题RealSubject要XXXX");
    }
}
// 代理主题:实现了主题接口,完成核心主题的辅助性工作
class ProxySubject implements Subject { 
    Subject subject;
    public ProxySubject(Subject subject) {
        this.subject = subject;
    }
    
    public void prepare() { // 代理主题处理的辅助性操作
        System.out.println("代理主题准备就绪!");
    }

    public void  eat() { // 核心主题要做的事
        this.subject.eat();
    }

    public void destory() { // 代理主题处理的辅助性操作
        System.out.println("代理主题善后完毕!");
    }
}
// 测试类
class TestProxy { 
    public static void main(String[] args) {
        Subject realSubject = new RealSubject(); // 核心主题
        Subject proxySubject = new ProxySubject(realSubject); // 代理主题
        proxySubject.prepare();
        proxySubject.eat();
        proxySubject.destory();
    }
}

代理设计模式:
  有一个主题操作接口(可能有多种方法),核心业务主题只完成核心功能,比如:吃饭,
而代理主题负责完成所有与核心主题有关的辅助性操作。

示例图:

  五、 接口延伸出的代理模式

参考:
  · 自己写的接口,绝对不要使用关键字new直接实例化接口子类,使用工厂类完成。