Java设计模式之结构型模式-代理模式(Proxy)
来源:互联网 发布:多空资金指标源码 编辑:程序博客网 时间:2024/06/03 12:30
“代理”即代表其进行某种活动。在日常生活中,“代理”随处可见。微商有微商的代理,买火车票也有代售点等等。
代理模式: 为其他对象提供一种代理用来控制对这个对象的访问
三个要素
1. Subject: 是RealSubject和Proxy的公共接口,可以在任何使用RealSubject的地方使用Proxy
2. RealSubject: 具体的所要被代理的对象,是Proxy所要代表的实体类
3. Proxy: 代理类,保存所要访问实体的引用,并且提供相同的接口
示例
以去代售点买火车票为例。原本我们买车票直接去火车站购买,现在出来代售点来代表火车站进行售票活动。
实现过程
1. 创建代理接口 Station
public interface Station { void buy();}
2. 创建具体的被代理的对象类 RealStation
public class RealStation implements Station { private String start; private String end; public RealStation(String start, String end) { this.start = start; this.end = end; } @Override public void buy() { System.out.println("===== 开始执行被代理对象方法 ====="); System.out.println("买了一张从 " + start + " 到 " + end + " 的火车票"); }}
3. 创建代理对象类 Agent
public class Agent implements Station { private RealStation realStation; private String start; private String end; public Agent(String start, String end) { this.start = start; this.end = end; } @Override public void buy() { System.out.println("===== 开始执行代理对象方法 ====="); if (realStation == null) { realStation = new RealStation(start, end); } realStation.buy(); }}
4. 创建代理测试类 ProxyTest 测试下
public class ProxyTest { public static void main(String[] args) { Station station = new Agent("诸暨", "杭州"); station.buy(); }}
运行的结果如下:
===== 开始执行代理对象方法 ========== 开始执行被代理对象方法 =====买了一张从 诸暨 到 杭州 的火车票
阅读全文
0 0
- 设计模式之代理(Proxy)----对象结构型模式
- 【结构型模式】代理模式(Proxy)之23种java设计模式
- Java设计模式之结构型模式-代理模式(Proxy)
- 结构型设计模式---代理模式(Proxy)
- 设计模式(结构型)之代理模式(Proxy Pattern)
- 【设计模式】结构型模式之Proxy代理
- JAVA设计模式(8) —<结构型>代理模式(Proxy)
- java设计模式之代理模式Proxy
- Java:设计模式之代理模式Proxy
- Java设计模式之代理模式(Proxy)
- java代理模式(Proxy)-结构型
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- 设计模式(十一)代理模式Proxy(结构型)
- Ubuntu 三步快速安装 Sublime Text 3
- cocos2dx 引擎版本和NDK的关系
- java深入线程
- 从Shiro-cas切换pac4j
- 谈谈你对webpack的看法
- Java设计模式之结构型模式-代理模式(Proxy)
- arcgis for js 点聚合功能
- hdu 6194 后缀数组+RMQ
- 解决python读写文件时UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x9d 的错误
- syncookie的原理与linux内核实现
- 布局和系统状态栏融合的方法
- html5 postMessage解决跨窗口/跨域消息传递
- Ubuntu 16.04 firefox 安装 flash
- 程序员的八重境界