`

设计模式——代理模式

    博客分类:
  • java
阅读更多

代理模式:

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

代理模式一般分为四种:

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

类图: 其中

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设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码

    浅析Java设计模式【3】——代理.pdf

    浅析Java设计模式【3】——代理.pdf

    设计模式实现——代理模式

    http://blog.csdn.net/t1234xy4/article/details/52729467

    Python设计模式之代理模式实例详解

    设计模式——代理模式 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 实现:戴励 替 卓贾易 送礼物给 娇娇 模型: #公共接口类 class InterFace: def request(self): pass #真实类 cla

    iOS设计模式——委托(delegate)例子

    代码实现代理模式。具体文章简介可以参考博文:http://blog.csdn.net/lovefqing/article/details/8270111

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    java 设计模式 静态代理模式

    //代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    Java设计模式 版本2

    设计模式之代理模式,请求的链式处理——职责链模式,请求发送者与接收者解耦——命令模式,自定义语言的实现——解释器模式,遍历聚合对象中的元素——迭代器模式,协调多个对象之间的交互——中介者模式,撤销功能...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第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和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    管理系统java sal源码 [toc] 设计模式 源码地址: 博客地址: 分类 序号 模式 & ...创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 ...Pattern)代理模式(Proxy Pattern)

    24种设计模式介绍与6大设计原则

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    设计模式--可复用面向对象软件的基础

    1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...

    设计模式Demo

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    C#23种设计模式_示例源代码及PDF

    代理模式 代理模式给某一个对象提供一个代理对象, 代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户 不想 或者不能够直接引用一个对象, 代理对象可以在客户和目标对象直接起到中介的...

Global site tag (gtag.js) - Google Analytics