设计模式-----代理模式
来源:互联网 发布:芝华仕沙发头等舱 知乎 编辑:程序博客网 时间:2024/04/30 16:47
代理模式
proxy,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式结构图
ps:Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体。
Subject类,定义了RealSubject和Proxy的公共接口,这样就在任何使用RealSubject的地方都可以使用Proxy。
RealSubject类,定义Proxy所代表的真实实体。
以大话设计模式中卓贾易代替戴励给娇娇送礼物为例
//代理接口 interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } class Pursuit:IGiveGift //"追求者"去实现“送礼物”接口 { SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(mm.Name + "送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name + "送你的鲜花"); } public void GiveChocolate() { Console.WriteLine(mm.Name + "送你巧克力"); } } class SchoolGirl { private string name; public string Name { get { return name; } set { name = value; } } } class Proxy : 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(); } }主程序代码
static void Main(string[] args) { SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name = "李娇娇"; Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); Console.Read(); }
类图
代理模式与装饰模式的区别
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。
3 0
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- 假如给你一天大数据的生活
- c语言中,字符数组与字符串赋值问题
- C++ 扫盲学习
- 一个人可用的链表操作
- wp文章编辑处作者的更改
- 设计模式-----代理模式
- webview小析
- Jsp 中的ajax
- XHTML简介
- git 远程分支
- Sencha Touch的Ext.Ajax.request调用WebService方法实例
- 悲观锁与乐观锁
- 常用编辑器的备份文件信息
- 【转】Linux删除文件后空间没有释放解决