思路:
1. 代理类与委托类实现同一接口
2. 在委托类中实现功能,在代理类的方法中引用委托类的同名方法
3. 外部类调用委托类某个方法时,直接以接口指向代理类的实例,正式代理的意义:屏蔽。
场景:
1. 当我们想要隐藏某个类时,可以为其提供代理类
2. 当一个类需要对不同的调用者提供不同的调用权限时,可以使用代理类来实现(代理类不一定只有一个,可以建立多个代理类进行实现,也可以在一个代理类中进行权限判断来进行不同权限的调用)
3. 当我们要扩展某个类的某个功能时,可以使用代理模式,在代理类中进行简单扩展(只针对简单扩展,可以在引用委托类的语句之前与之后进行)
特点:
代理模式虽然实现了调用者与委托类之间的强耦合,但是却增加了代理类与委托类之间的强耦合,而且增加代理类之后明显会增加处理时间,拖慢处理时间。
/*** 自然人*/public interface ZiRanRen {void quanLi();}
/*** 委托人*/public class Mayun implements ZiRanRen {public void eat() {System.out.println("吃饭");}public void drink() {System.out.println("喝酒");}@Overridepublic void quanLi() {System.out.println("我赋予我的代理律师来行使权力");}}
/*** 律师*/public class LvShi implements ZiRanRen {@Overridepublic void quanLi() {new Mayun();}}
public class Clienter {public static void main(String[] args) {ZiRanRen ls = new LvShi();ls.quanLi();}}//我赋予我的代理律师来行使权力
