代理模式
一.作用:为其他对象提供一种代理以控制对这个对象的访问。
二.代码
1.要被代理的目标接口
1 package design.proxy; 2 3 public interface Target { 4 void action(); 5 }
2.被代理目标的实现类A
1 package design.proxy; 2 3 public class TargetImplA implements Target{ 4 5 @Override 6 public void action() { 7 // TODO Auto-generated method stub 8 System.out.println("这是代理目标的实现类A。。"); 9 } 10 11 }
3.代理类A也实现了目标接口,这样代理类A就可以代理任意目标接口的实现类,这里代理类A专门代理目标接口的实现类A
1 package design.proxy; 2 3 public class ProxyA implements Target{ 4 private Target target; 5 public ProxyA(){ 6 System.out.println("这是代理类A。。"); 7 this.target = new TargetImplA(); 8 } 9 10 public void action(){ 11 System.out.println("---代理开始---"); 12 target.action(); 13 System.out.println("---代理结束---"); 14 } 15 }
4.测试类
1 package design.proxy; 2 3 public class Test { 4 public static void main(String[] args) { 5 Target target = new ProxyA(); 6 target.action(); 7 } 8 }
5.结果
这是代理类A。。
---代理开始---
这是代理目标的实现类A。。
---代理结束---
三.代理模式和装饰模式的区别:
从代理类和装饰类可以看出,它们的最大区别就是代理模式由代理类创建目标对象,而装饰类需要传入目标对象。