代理模式:
为其他对象提供一种代理以控制对这个对象的访问。
代理模式一般分为四种:
- 远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象在于不同地址空间的事实。
- 虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。如打开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;
}
@Override
public void giveChocolate() {
// TODO Auto-generated method stub
System.out.println(mm.getName() + " 送你巧克力");
}
@Override
public void giveDolls() {
// TODO Auto-generated method stub
System.out.println(mm.getName() + " 送你洋娃娃");
}
@Override
public void giveFlowers() {
// TODO Auto-generated method stub
System.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的同时实例化Persuit
this.persuit = new Persuit(mm);
}
@Override
public void giveChocolate() {
// TODO Auto-generated method stub
persuit.giveChocolate();
}
@Override
public void giveDolls() {
// TODO Auto-generated method stub
persuit.giveDolls();
}
@Override
public void giveFlowers() {
// TODO Auto-generated method stub
persuit.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();
}
}
分享到:
相关推荐
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
浅析Java设计模式【3】——代理.pdf
http://blog.csdn.net/t1234xy4/article/details/52729467
设计模式——代理模式 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 实现:戴励 替 卓贾易 送礼物给 娇娇 模型: #公共接口类 class InterFace: def request(self): pass #真实类 cla
代码实现代理模式。具体文章简介可以参考博文:http://blog.csdn.net/lovefqing/article/details/8270111
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
设计模式之代理模式,请求的链式处理——职责链模式,请求发送者与接收者解耦——命令模式,自定义语言的实现——解释器模式,遍历聚合对象中的元素——迭代器模式,协调多个对象之间的交互——中介者模式,撤销功能...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...
4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
管理系统java sal源码 [toc] 设计模式 源码地址: 博客地址: 分类 序号 模式 & ...创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 ...Pattern)代理模式(Proxy Pattern)
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
代理模式 代理模式给某一个对象提供一个代理对象, 代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户 不想 或者不能够直接引用一个对象, 代理对象可以在客户和目标对象直接起到中介的...