代理模式与AOP
AOP(Aspect-Oriented Programming,面向方面编程)
以做饭为例,我们重点是关注中间的炒菜过程,但炒菜之前要择菜,之后要刷锅,即我们只关注炒菜过程这一个方面。
抽象角色:
1 public interface Subject { 2 public void request() ; 3 }
真实角色:
1 public class RealSubject implements Subject { 2 3 public void request() { 4 System.out.println("真实实现 --> 只关注于做菜") ; 5 } 6 7 }
代理角色:内部包含对真实对象的引用
1 public class ProxySubject implements Subject { 2 private Subject sub = null ; 3 public ProxySubject(Subject sub) 4 { 5 this.sub = sub ; 6 } 7 public void before() 8 { 9 System.out.println("开始操作之前 --> 择菜") ; 10 } 11 public void request() { 12 this.before() ; 13 this.sub.request() ; 14 this.after() ; 15 } 16 public void after() 17 { 18 System.out.println("结束操作之后 --> 刷锅") ; 19 } 20 }
测试代码:
1 public class TestProxy { 2 3 public static void main(String[] args) { 4 Subject sub = new ProxySubject(new RealSubject()) ; 5 sub.request() ; 6 } 7 8 }
在测试代码中,客户端调用代理类时也只是用其request方法,即我们只关注做菜,但实际上request方法中已经包含了before方法和after方法,即代理类帮我们实现了择菜和刷锅的功能。

浙公网安备 33010602011771号