设计模式--结构模式--代理模式

一、基本概念。

1、代理模式(Proxy),有动态代理与静态代理

2、角色分析:
  A:Subject:抽象主题角色:可以是抽象类,也可以是接口。抽象主题是一个普通的业务类型,无特殊要求。
  B:RealSubject:具体主题角色:也叫做被委托角色或被代理角色,是业务逻辑的具体执行者。
  C:Proxy: 代理主题角色:也叫做委托类或代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后处理工作。
  D:Client:测试使用

二、简单例子

  A:Subject:

设计模式--结构模式--代理模式
 1 package comm.pattern.struct.proxy;
 2 
 3 /**
 4  * 
 5  * @Title: Subject.java
 6  * @Package: comm.pattern.struct.proxy
 7  * @Description: 接口
 8  * @author yangzhancheng
 9  * @2020年3月17日:下午1:56:01
10  *
11  */
12 public interface Subject {
13     void request();
14 }
View Code

 

  B:RealSubject:

设计模式--结构模式--代理模式
 1 package comm.pattern.struct.proxy;
 2 
 3 /**
 4  * 
 5  * @Title: RealSubject.java
 6  * @Package: comm.pattern.struct.proxy
 7  * @Description: 描述对象
 8  * @author yangzhancheng
 9  * @2020年3月17日:下午1:56:15
10  *
11  */
12 public class RealSubject implements Subject {
13 
14     @Override
15      public void request()
16     {
17         System.out.println("访问真实的IP:10.10.10.110");
18     }
19 }
View Code

 

  C:Proxy: 

设计模式--结构模式--代理模式
 1 package comm.pattern.struct.proxy;
 2 
 3 /**
 4  * 
 5  * @Title: Proxy.java
 6  * @Package: comm.pattern.struct.proxy
 7  * @Description: 代理对象
 8  * @author yangzhancheng
 9  * @2020年3月17日:下午1:58:15
10  *
11  */
12 public class Proxy implements Subject {
13 
14     private RealSubject realSubject;
15 
16     public void request() {
17         if (realSubject == null) {
18             realSubject = new RealSubject();
19         }
20         preRequest();
21         realSubject.request();
22         postRequest();
23     }
24 
25     public void preRequest() {
26         System.out.println("代理地址为:www.yangzhan.com");
27     }
28 
29     public void postRequest() {
30         System.out.println("代理把访问真实地址后的信息做处理返送给客户。");
31     }
32 
33 }
View Code

 

  D:Client:

设计模式--结构模式--代理模式
 1 package comm.pattern.struct.proxy;
 2 
 3 /**
 4  * 
 5  * @Title: Client.java
 6  * @Package: comm.pattern.action.templateMethod
 7  * @Description: 描述该文件做什么
 8  * @author yangzhancheng
 9  * @2020年3月1日:下午4:47:17
10  *
11  */
12 public class Client {
13 
14     public static void main(String[] args) {
15 
16         Proxy proxy = new Proxy();
17         proxy.request();
18 
19     }
20 
21 }
View Code

 

运行结果

代理地址为:www.yangzhan.com
访问真实的IP:10.10.10.110
代理把访问真实地址后的信息做处理返送给客户。

 

三、总结

1、代理与装饰模式区别
     A、使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
     B、让别人帮助你做你并不关心的事情,叫代理模式。
     C、为让自己的能力增强,使得增强后的自己能够使用更多的方法,拓展在自己基础之上的功能的,叫装饰器模式
     D、他们都实现的是同一个接口。

2、动态代理:后续补充

3、代理的源代码分析,后续补上。

 

上一篇:Java学习_根据用户信息查看浏览过商品信息


下一篇:Oracle操作