首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式——代理模式

2012-11-10 
设计模式——代理模式代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式一般分为四种:远程代

设计模式——代理模式

代理模式:

为其他对象提供一种代理以控制对这个对象的访问。

代理模式一般分为四种:

    远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象在于不同地址空间的事实。虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。如打开HTML网页时,只看到所有文字,图片却一张张下载后才能看到。那些未打开的图片框,通过虚拟代理来替代真实图片,代理存储了真实图片的路径和尺寸。安全代理:用来控制真实对象访问时的权限。智能指引:当调用真实对象时,代理处理另外一些事。

类图:其中

Subject类定义了公用接口

RealSubject和Proxy实现Subject,这样在任何使用RealSubject的地方都可以使用Proxy

设计形式——代理模式

实例:

吕秀才让燕小六代其向郭芙蓉求婚。

Ted让Marshall代其向Robin送鲜花、巧克力、洋娃娃。

类图:

设计形式——代理模式

代码

IGiveGift接口,相当于Subject

package cn.edu.tju.proxyPattern;//Subject接口public interface IGiveGift {public void giveDolls();public void giveFlowers();public void giveChocolate();}
?

Persuit类,相当于RealSubject

package cn.edu.tju.proxyPattern;//RealSubject类public class Persuit implements IGiveGift{private SchoolGirl mm;public Persuit(SchoolGirl mm){this.mm = mm;}@Overridepublic void giveChocolate() {// TODO Auto-generated method stubSystem.out.println(mm.getName() + " 送你巧克力");}@Overridepublic void giveDolls() {// TODO Auto-generated method stubSystem.out.println(mm.getName() + " 送你洋娃娃");}@Overridepublic void giveFlowers() {// TODO Auto-generated method stubSystem.out.println(mm.getName() + " 送你鲜花");}}
?

Proxy类

package cn.edu.tju.proxyPattern;//Proxy类public class Proxy implements IGiveGift{private Persuit persuit;public Proxy(SchoolGirl mm){//Proxy与Persuit是关联关系,体现在当实例化Proxy的同时实例化Persuitthis.persuit = new Persuit(mm);}@Overridepublic void giveChocolate() {// TODO Auto-generated method stubpersuit.giveChocolate();}@Overridepublic void giveDolls() {// TODO Auto-generated method stubpersuit.giveDolls();}@Overridepublic void giveFlowers() {// TODO Auto-generated method stubpersuit.giveFlowers();}}
?

SchoolGir类,辅助

package cn.edu.tju.proxyPattern;//辅助类public class SchoolGirl {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
?

Test类

package cn.edu.tju.proxyPattern;//测试类public class Test {public static void main(String[] args){SchoolGirl mm = new SchoolGirl();mm.setName("Robin");Proxy proxy = new Proxy(mm);proxy.giveChocolate();proxy.giveDolls();proxy.giveFlowers();}}
?

热点排行