设计模式——代理模式
来源:互联网 发布:pci串行端口 感叹号 编辑:程序博客网 时间:2024/05/21 02:34
场景设置
Boy 有一束鲜花要送给 Girl,但是又不好意思送,因此寻找Proxy将鲜花转交给Girl。
首先定义鲜花持有者接口,实现该接口的类都具有送花的能力:
interface FlowerKeeper{ public void sendFlower();}
然后定义Boy类,能够拥有鲜花并且有送鲜花的能力(只是不亲自送而已):
class Boy implements FlowerKeeper{ private String flowerName; Boy(String flower){ this.flowerName = flower; } @Override public void sendFlower() { System.out.println("I give you this flower"); }}
接下来Boy要寻找一个Proxy,这个Proxy同样要能够有鲜花(从Boy那里拿到的)而且拥有送花的能力:
class Proxy implements FlowerKeeper{ private FlowerKeeper boy = null; Proxy(){ if(boy==null) boy = new Boy("郁金香"); } @Override public void sendFlower() { System.out.println("The Boy said: "); boy.sendFlower(); }}
最后,这个Proxy代表着Boy,调用自己的sendFlower
方法将鲜花转交给了Girl(该类就不在此定义了,具体在FlowerKeeper 的interface中可能持有对Girl进行表白等等的方法)。
在客户端中可以如下操作:
public static void main(String[] args){ FlowerKeeper proxyFlowerKeeper = new Proxy(); proxyFlowerKeeper.sendFlower();}
为了清楚起见,我将Proxy的对象名定义成为proxyFlowerKeeper,如果为了从表象上达到代理的真实目的(隐藏内部),那么可以这么写:
public static void main(String[] args){ FlowerKeeper boy = new Proxy(); boy.sendFlower();}
如果在客户端上面还有一层的话,new Proxy();
的细节可以不被暴露,则外界也无从得知到底这个boy是Proxy还是真的是Boy本身。
代理模式适用情况
代理模式的使用,是为了“代理”它内部所持有的某个对象的行为,可能在该原始行为的基础上增加一些附加行为而同时在上层看来,调用这两种行为方法是没有差别的。类似于
在互联网中,没人知道你是一条狗。
电脑代理了一只狗的键盘操作行为,只要它键盘按对了,打出的字根人打出的字是无法区分的,因此在网络那头看来,Proxy(对方电脑)隐藏了它所持有的对象和细节。
0 0
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式——代理设计模式
- 设计模式——代理设计模式
- 每日设计模式——代理模式
- 学习设计模式——代理模式
- java设计模式——代理模式
- 设计模式——策略、代理模式
- 设计模式——代理模式(Proxy)
- 设计模式——代理模式
- 黑马程序员_Java_反射
- COCOS2D-X象棋代码(无AI)
- windows下关闭gvim叮叮叮和闪屏
- *LeetCode-Unique Binary Search Trees
- java 类加载器
- 设计模式——代理模式
- (hdu step 5.2.2)统计难题(求一堆单词中以某一单词为前缀的单词的个数)
- Leetcode: Pascal's Triangle II
- 利用ADO.NET连接Excel数据库,并执行相应的操作
- Machine Learning 混合高斯模型
- 网页布局标签的运用
- Linux 下用 C 开发 MySql 数据库应用
- 当您尝试安装 Microsoft Office 2010 或 2007 时出现错误 1935
- ubutun 在文件夹下,右键在当前位置打开terminal server