代理模式与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方法,即代理类帮我们实现了择菜和刷锅的功能。

 

posted @ 2014-04-14 15:40  sky钦  阅读(178)  评论(0)    收藏  举报