在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。目的是为了保护目标对象或增强目标对象
代理模式包含如下角色:
- Subject: 抽象主题角色
- Proxy: 代理主题角色
- RealSubject: 真实主题角色
静态代理:
显示声明代理对象,在编译期就生成了代理类
由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行之前,代理类的类文件就已经被创建了
实现:一个公共接口、一个委托类、一个代理类
优点:简单、实用、效率高
缺点:
需要实现接口,造成代码冗余
只能对固定接口的实现类实现代理,灵活性较差
代理主题角色
public class Father {
private Son son = null;
public Father(Son son) {
this.son = son;
}
public void findLover() {
System.out.println("父母物色对象");
this.son.findLover();
System.out.println("双方同意");
}
}
抽象主题角色
public interface Person {
public void findLover();
}
真实主题角色
public class Son implements Person {
public void findLover() {
System.out.println("儿子要求:肤白貌美大长腿");
}
}
测试类
public class FatherTest {
public static void main(String[] args) {
Father father = new Father(new Son());
father.findLover();
}
}
运行结果: