设计模式学习笔记--代理模式

Posted 忆雨1992

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习笔记--代理模式相关的知识,希望对你有一定的参考价值。

        近日在研究设计模式,感觉代理模式是要重点掌握的,在这里记录一下。

        什么是代理模式?比较官方的解释是:为其他对象设置一种代理以控制对实际对象的访问

        为了更好的理解代理模式,这里举个例子。在驻外现场,有一个项目经理、“二把手”和若干项目组成员,项目经理每天要安排项目组成员任务,主持晨会,写报告汇报工作进展。可是有几个月项目经理要回总部,这里就需要“二把手”来安排项目组成员任务,主持晨会,写报告汇报工作进展。而在这期间新来的同事只知“二把手”,而不识项目经理。

        在上述例子中,“二把手”就是代理,新来的项目组成员只需要听吩咐做事,并不知道项目经理的存在。

         该上图啦,代理模式如下图所示:

 

        Subject类,定义了realSubject类和Proxy类的共用接口,这样就在任何使用realSubject的地方都可以使用Proxy。

        realSubject类,定义Proxy所代表的真实实体。

        Proxy类,保存一个引用使得代理可以访问实体,并提供一个和Subject的接口相同的接口,这样代理就可以用来代替实体。

        代理模式Java代码实现如下:

 

 1 package designPattern;
 2 
 3 /**
 4  * 代理模式
 5  * @author yiRain
 6  *
 7  */
 8 public class ProxyTest {
 9     public static void main(String[] args) {
10         Proxy erBaShou = new Proxy();
11         erBaShou.assignTasks();
12         erBaShou.handMeeting();erBaShou.report();
13     }
14     
15 }
16 
17 //Subject抽象类,定义realSubject类和Proxy类的共用接口
18 abstract class Subject{
19     public abstract void assignTasks();//安排工作任务
20     public abstract void handMeeting();//主持晨会
21     public abstract void report();//汇报工作
22 }
23 
24 //RealSubject类,proxy代表的真实实体
25 //(项目经理)
26 class RealSubject extends Subject{
27     @Override
28     public void assignTasks(){
29         System.out.println("安排工作任务");
30     }
31 
32     @Override
33     public void handMeeting() {
34         System.out.println("主持晨会");
35         
36     }
37 
38     @Override
39     public void report() {
40         System.out.println("汇报工作");
41         
42     };
43 }
44 
45 //Proxy类,保存一个引用使得代理可以访问实体,
46 //并提供一个和Subject的接口相同的接口,这样代理就可以用来代替实体
47 //(二把手)
48 class Proxy extends Subject{
49     RealSubject realSubject = new RealSubject();
50 
51     @Override
52     public void assignTasks() {
53         realSubject.assignTasks();
54         
55     }
56 
57     @Override
58     public void handMeeting() {
59         realSubject.handMeeting();
60         
61     }
62 
63     @Override
64     public void report() {
65         realSubject.report();
66         
67     }
68     
69 }

 

以上是关于设计模式学习笔记--代理模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习笔记之代理模式

Spring学习笔记7:静态动态代理模式

设计模式 - 学习笔记 - 代理模式ProxyPattern

设计模式 - 学习笔记 - 代理模式ProxyPattern

设计模式学习笔记--代理模式

代理模式——HeadFirst设计模式学习笔记