每个模式的名称就表明了该模式的作用,代理模式就是用代理类替代原对象进行一些操作。采用代理类调用原有的方法,可以对原对象产生的结果进行控制。
1. 定义一个接口:
1 public interface Sourceable { 2 void function(); 3 }
2. 定义实现类:
1 public class Source implements Sourceable { 2 3 @Override 4 public void function() { 5 System.out.println("function"); 6 } 7 }
3. 定义代理:
1 public class Proxy implements Sourceable { 2 3 private Sourceable source; 4 5 public Proxy(){ 6 this.source = new Source(); 7 } 8 9 public Proxy(Sourceable source){ 10 this.source = source; 11 } 12 13 @Override 14 public void function() { 15 before(); 16 source.function(); 17 atfer(); 18 } 19 20 private void atfer() { 21 System.out.println("after"); 22 } 23 24 private void before() { 25 System.out.println("before"); 26 } 27 }
可以看出:
(1). 代理类实现和目标类相同的接口
(2). 代理类的功能由调用目标类功能来实现
(3). 在调用功能前后等位置(前、后、前后、catch块)可以添加扩展功能