设计模式——代理模式
2016-03-05 23:36
309 查看
来人!我要报警,大话设计模式居然教程序员追妹子!今天继续学习了代理模式,现阶段感觉比较好理解,随着自己学习的深入相必会发现这个模式的优点。
1、定义:为其他对象提供一种代理以控制对这个对象的访问。
2、结构图:
3、程序示例:
首先建立subject接口:
IGiveGift类:
然后定义SchoolGirl类,也就是被追求者
追求者类Pursuit(RealProject类)
代理者,也就是帮忙递东西的代理Proxy类
这里要注意,此类中的对象为真正的追求者也就是RealProject类。
程序测试Test类:
测试结果:
娇娇,送你洋娃娃
娇娇,送你鲜花
娇娇,送你巧克力
4、总结:(留下以后慢慢理解)
代理分类
(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。
(3)安全代理,用来控制真是对象访问时的权限。
(4)智能指引,是指当前调用真是对象时,代理处理另外一些事。
最近天天在看书,希望能提高效率,随着学习的深入能提高领悟力。
1、定义:为其他对象提供一种代理以控制对这个对象的访问。
2、结构图:
3、程序示例:
首先建立subject接口:
IGiveGift类:
public interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); }
然后定义SchoolGirl类,也就是被追求者
public class SchoolGirl { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
追求者类Pursuit(RealProject类)
public class Pursuit implements IGiveGift{ SchoolGirl mm; public Pursuit(SchoolGirl mm){ this.mm = mm; } public void GiveDolls(){ System.out.println(mm.getName()+",送你洋娃娃"); } public void GiveFlowers(){ System.out.println(mm.getName()+",送你鲜花"); } public void GiveChocolate(){ System.out.println(mm.getName()+",送你巧克力"); } }
代理者,也就是帮忙递东西的代理Proxy类
public class Proxy implements IGiveGift{ Pursuit gg; public Proxy(SchoolGirl mm){ gg = new Pursuit(mm); } public void GiveDolls(){ gg.GiveDolls(); } public void GiveFlowers(){ gg.GiveFlowers(); } public void GiveChocolate(){ gg.GiveChocolate(); } }
这里要注意,此类中的对象为真正的追求者也就是RealProject类。
程序测试Test类:
public class Test { public static void main(String args[]){ SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.setName("娇娇"); Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); } }
测试结果:
娇娇,送你洋娃娃
娇娇,送你鲜花
娇娇,送你巧克力
4、总结:(留下以后慢慢理解)
代理分类
(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。
(3)安全代理,用来控制真是对象访问时的权限。
(4)智能指引,是指当前调用真是对象时,代理处理另外一些事。
最近天天在看书,希望能提高效率,随着学习的深入能提高领悟力。
相关文章推荐
- PL/SQL之二-块结构和组成元素
- ZooKeeper 基本操作
- 正则表达式之(?=pattern)(!=pattern)
- HTML5+CSS3鼠标移入移出图片生成随机动画
- 网站购物,使用pickle
- Sublime Text3中文版+添加右键菜单
- 操作系统工作小解
- HDU 5636 关键点的 floyd 最短路问题
- 算法导论-7-2
- PL/SQL之一-开篇
- Ajax文件详解
- Java标识符命名。。。
- 工作半年,总结分享
- 凭什么你伤害我,我还要感激你
- Food Delivery(区间DP)
- Codeforces Round #344 (Div. 2)
- Android TTS(TextToSpeech)语音输出与RecognizerIntent语音识别
- TabBar自定义图片的设置
- Linux命令之file命令 待续版
- 金融项目开发~安全之xss