<四>读<<大话设计模式>>之代理模式

代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比如代理商。在项目的实际应用中也有很多地方用到,比如spring通过代理模式生成对象等。

代理模式的书面定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

在《《大话设计模式》》一书中以一个有男朋友的女孩让“小菜”帮忙修电脑的故事展开的,其实说白了代理就是帮别人干活的,一般老板不出面,都是小弟帮忙做交易。代理模式很好理解也很好懂,那就直接来代码吧

1、要追求的姑娘

/*

*
被追求的女孩

*/

publicclass Girl {

private String
name;

public String getName() {

returnname;

}

publicvoid setName(String name) {

this.name = name;

}

}

2、真正的追求者

/*

*
真实的追求者

*/

publicclass Pursuit
implements GiveGift {

//礼物当然送给女孩了

protected Girl
girl;

public
Pursuit(Girl girl){

this.girl = girl;

}

publicvoid giftChocolate() {

//
TODO Auto-generated method stub

System.out.println("送巧克力给"+girl.getName());

}

publicvoid giftFlowers() {

//
TODO Auto-generated method stub

System.out.println("送花给"+girl.getName());

}

}

3、代理中间人

/*

*
代理类

*/

publicclass Proxy
implements GiveGift {

protected Pursuit
pursuit;

//毕竟是代理,真正的还是追求者与女孩的联系

public Proxy(Girl girl){

pursuit =
new Pursuit(girl);

}

publicvoid giftChocolate() {

//
TODO Auto-generated method stub

pursuit.giftChocolate();

}

//花其实是追求者的

publicvoid giftFlowers() {

//
TODO Auto-generated method stub

pursuit.giftFlowers();

}

}

4、客户端

publicclass ProxyClient {

/**

* @param args

*/

publicstaticvoid main(String[] args) {

//
TODO Auto-generated method stub

Girlgirl = new Girl();

girl.setName("妹妹");

//真正操作的是代理

Proxyproxy =  new Proxy(girl);

proxy.giftChocolate();

proxy.giftFlowers();

}

}

代理模式都在什么场合应用呢?(摘自网络)

1) 远程代理(Remote  Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远程代理又叫做大使(Ambassador)

2) 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。

3) 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。

4) 智能指引(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作。

5) Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。一般来说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。

总结:本章代理模式很好理解,代码也非常简单,在这里说一下它的有点吧。职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。还有就是高扩展性

时间: 2025-01-01 04:35:36

<四>读<<大话设计模式>>之代理模式的相关文章

【大话设计模式】——代理模式

对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate 的继承映射可以理解持久化类之间的继承关系.例如:人和学生之间的关系.学生继承了人,可以认为学生是一个特殊的人,如果对人进行查询,学生的实例也将被得到. Hibernate支持三种继承映射策略: 使用 subclass 进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. 使用 joined-subclass 进行映射: 对于继承关系中的子类使用同一个表

&lt;二&gt;读&lt;&lt;大话设计模式&gt;&gt;之策略模式

又和大家见面了,能够坚持写出第二篇文章真不错,好好加油. <<大话设计模式>>讲解策略模式是以商场收银软件程序开头的,那么问题来了,哪家商场收银软件强,开玩笑了.读过上篇文章<<简单工厂模式>>的知道,它有两个缺点:1.客户端依赖两个类,耦合性高:2.如果算法过多则需要写很多类.解决上面问题的就是策略模式了. 策略模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 商场收银软件:单价*打折算法=售价.

&lt;九&gt;读&lt;&lt;大话设计模式&gt;&gt;之建造者模式

学习了这么多模式,其实回想一下其实也没什么,就是用不同的方式设计代码,保证代码的可扩展性.复用等,稍微对代码进行一下修改就是另外一种模式.在我们工作中其实已经用了很多模式了,只不过不知道或者没留意他叫什么而已,无所谓,只要会用一切都是浮云. 关于<<大话设计模式>>对建造者模式的讲解是以画一个人来作为例子讲解的.人分为高人.矮人.胖人.瘦人等,但都是人,但当你去画一个人的时候,画的过程都是稳定的,都需要画头.身子.手.脚,不同的是建造的细节是不一样的.所以如果你需要将一个复杂的构件

大话设计模式_代理模式(Java代码)

代理模式:为其他对象提供一种代理以控制对这个对象的访问 简单描述:1个父类A(或者接口),1个具体执行动作的子类,1个代理类,代理类持有具体子类的引用,在方法中调用具体子类的对象方法.客户端只与代理类交互 大话设计模式中的截图: 例子代码: Subject类: 1 package com.longsheng.proxy; 2 3 public interface IGiveGifts { 4 5 public void giveDolls(); 6 7 public void giveFlowe

&lt;六&gt;读&lt;&lt;大话设计模式&gt;&gt;之原型模式

原型模式也是很简单的一种模式,对于java来说已经有相应的接口了(Cloneable).关于原型模式<<大话设计模式>>是以投放简历作为例子讲解的,即我要投放很多简历,其实每个简历都一样,所以只要我写好一份,其他的复制就行了,其实就是今天讲的原型模式,就是把要复制的类对象的属性复制到另外一个对象上(其实不是复制而是对象的引用改变). 原型模型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 浅复制VS深复制 关于克隆有两个概念 浅复制:就是只复制值类型的字段,不能

&lt;八&gt;读&lt;&lt;大话设计模式&gt;&gt;之外观模式

外观模式其实很好理解的,就是将表面的东西展示给人看,内部的东西你不知道的(因为已经封装好了),比如一个外部系统要和公司内部5个系统进行交互,而这5个系统之间也有交互,那么第一种就是外部系统和5个系统都进行交互:第二种就是做一个接口将外部系统需要的逻辑封装成一个方法,该方法中包含了关于5个系统的交互方式,这样外部系统就不用直接和5个系统交互了,直接调用接口完事.外观模式也叫门面模式,其实说白了就是把要用的东西封装起来使交互更加方便. 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定义

&lt;十二&gt;读&lt;&lt;大话设计模式&gt;&gt;之状态模式

对于状态模式,<<大话设计模式>>是以人从上班到下班到加班的状态来展开讲述的.状态模式其实就是某一个对象在某个过程或者时间的一个状态记录,但是这个状态的顺序不能发生变化,在程序设计方面可能要比其他模式稍微复杂点,请待我慢慢将来. 本人喜欢用代码来形象的讲述原理,可能是因为对单纯的看些理论的书有些反感或者无趣吧,我希望以后的教育也如此,要不大家都不高考了...嘿嘿说多了 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 还是代码呈现吧,概念太抽象了.

大话设计模式笔记 代理模式

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. package proxy; /* * Subject Class,the common interface of RealSubject and Proxy, */ public abstract class Subject { public abstract void Request(); } package proxy; //represent the real entity public class RealSubj

大话设计模式-代理模式(7)

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ProxyFactory { interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GvieChoolate(); } } using System; using System.Collections.Generic; using