/*
动机:
 在面向对象系统中,有些对象由于某种原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。
 如何在不是去透明操作对象的同时来管理、控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。
意图:
 为其他对象提供一种代理以控制对这个对象的访问。
Proxy模式的几个要点:
 1)”增加一层间接层“是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的Proxy对象便是解决这一问题的常用手段。
 2)具体proxy设计模式的实现方法、实现力度都相差很大。有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组建模块提供抽象代理层,在架构层次对对象做proxy。
 3)proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候能损及一些透明性是可以的.
代理模式的应用:
 1) 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
 2)虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
 3)安全代理,用来控制真实对象访问时的权限。
 4)智能指引,是指当调用真实的对象时,代理处理另外一些事。
*/

//(一)简单的代码模拟职工管理系统

//version 1.0 无代理模式 using System; class Employee { public void GetSalary() { //... } public void Report() { //... } public void ApplyVacation() { //... } } class HrSystem { public void Process() { Employee employee = new Employee(); employee.Report(); employee.ApplyVacation();_ } } //Version 2.0 using System; interface IEmployee { public void GetSalary(); public void Report(); public void ApplyVacation(); } //运行在Internet远端的一台计算机上 class Employee : IEmployee { public void GetSalary() { //... } public void Report() { //... } public void ApplyVacation() { //... } } //运行在本地的windows Forms上 //代理的目的是为了屏蔽WebService的通信细节。 class EmployeeProxy : IEmployee { public EmployeeProxy() { //对对象创建的一种SOAP封装 } public void GetSalary() { //对对象创建、访问的一种SOAP封装 //发送SOAP 数据 //如果有返回值,接受返回值SOAP,解包,返回原生(Raw)的C#数据 } public void Report() { //... } public void ApplyVacation() { //... } } class HrSystem { public void Process() { Employee employee = new Employee(); employee.Report(); employee.ApplyVacation(); } }

//(二)为别人做嫁衣裳 —— 代理模式追MM实例

//没有代理模式的代码 using System; //MM类 class Girl { private string name; public string Name { get{return name;} set{name = value;} } } // 追求者类 class Pursuit { private string name; private Girl mm; public string Name { get{return name;} set{name = value;} } public Pursuit(Girl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(this.Name + "送" + mm.Name +"洋娃娃"); } public void GiveFlowers() { Console.WriteLine(this.Name + "送" + mm.Name + "鲜花"); } public void GiveChocolate() { Console.WriteLine(this.Name + "送" + mm.Name + "巧克力"); } } //客户端调用代码 class Test { public static void Main() { Girl Unknown = new Girl(); Unknown.Name = "未知"; Pursuit Guopeng = new Pursuit(Unknown); Guopeng.Name = "国鹏"; Guopeng.GiveDolls(); Guopeng.GiveFlowers(); Guopeng.GiveChocolate(); Console.Read(); } }

//代理模式追MM using System; //代理接口 interface GiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } //MM类 class Girl { private string name; public string Name { get{return name;} set{name = value;} } } //追求者类 class Pursuit : GiveGift { private string name; private Girl mm; public string Name { get{return name;} set{name = value;} } public Pursuit(Girl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(this.Name + "送" + mm.Name +"洋娃娃"); } public void GiveFlowers() { Console.WriteLine(this.Name + "送" + mm.Name + "鲜花"); } public void GiveChocolate() { Console.WriteLine(this.Name + "送" + mm.Name + "巧克力"); } } //代理类 class Proxy : GiveGift { Pursuit gg; public Proxy(string gg, Girl mm) { this.gg = new Pursuit(mm); this.gg.Name = gg; } public void GiveDolls() { gg.GiveDolls(); } public void GiveFlowers() { gg.GiveFlowers(); } public void GiveChocolate() { gg.GiveChocolate(); } } //客户端类 class Test { public static void Main() { Girl Unknown = new Girl(); Unknown.Name = "未知"; Proxy daili = new Proxy("国鹏",Unknown); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); Console.WriteLine(); } }

为别人做嫁衣裳——代理模式相关推荐

  1. 《大话设计模式》之--第7章 为别人做嫁衣----代理模式

    第7章 为别人做嫁衣----代理模式 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别提了,人家是有男朋友的." ...

  2. 第7章 为别人做嫁衣----代理模式 大话设计模式

    第7章 为别人做嫁衣----代理模式 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别提了,人家是有男朋友的." ...

  3. java设计模式之为别人做嫁衣----代理模式

    2019独角兽企业重金招聘Python工程师标准>>> 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别 ...

  4. 为别人做嫁衣 代理模式

    7.1 为别人做嫁衣! 7.2 没有代理的代码 namespace 代理模式 {class Program{static void Main(string[] args){SchoolGirl jia ...

  5. 设计模式(三) | 为别人做嫁衣---代理模式

    代理模式 代理模式:为其他对象提供一种代理,以控制对这个对象的访问. 模式动机: 在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为"代理"的第三者来实现 ...

  6. 为别人做嫁衣——代理模式

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式(Proxy)结构图 Subject类,定义了RealSuject和Proxy的共用的接口,这样就在任何使用RealSu ...

  7. 【设计模式】为别人做嫁衣 --- 代理模式

    一,概述 定义:代理模式(Proxy)为另一个对象提供一个替身或占位符以控制对这个对象的访问,简而言之就是用一个对象来代表另一个对象. 作用:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下 ...

  8. 为别人做嫁衣---代理模式

    引例 : 追求者(C),被追求者(B) ,代理者(A) 故事概要: A和B是好朋友, A喜欢B ,但A以C的名义去送给B礼物 1.没有代理 追求者类class Pursuit{SchoolGirl m ...

  9. 第七章 为别人做嫁衣—代理模式

    仅仅是个人学习笔记,不具备参考价值 在说一下代理模式的应用. (1)远程代理(Remote Proxy) -可以隐藏一个对象存在于不同地址空间的事实.也使得客户端可以访问在远程机器上的对象,远程机器可 ...

最新文章

  1. C#如何在Form中嵌入并且操作Excel表格
  2. 苹果12系统升级无服务器,iOS 12.1.4验证现已关闭 你还没升到12.2吗?
  3. 计算各种图形的周长(接口与多态)_JAVA
  4. 计算机七个计算原理,计算机组成原理计算题(7页)-原创力文档
  5. Android开发入门一之Android应用程序架构详解
  6. Eclipse下创建Spring MVC web程序--非maven版
  7. 便宜php扩展,php扩展【货币问答】- php扩展所有答案 - 联合货币
  8. --allow-file-access-from-files 命令的使用
  9. JavaScript库
  10. 初级药师职称需要考计算机英语吗,药师职称评审政策解读:初级药师不用再考了!...
  11. 推荐算法-GBDT与LR算法融合
  12. 【免费抢票】6月9日杭州,产品经理会议
  13. 樊登读书会-《关键对话》
  14. python单核运行_python下多核,单核CPU对于并行,并发执行效率的对比-Go语言中文社区...
  15. UEBA案例分析系列之检测失陷凭证
  16. 【Photoshop实用教程】如何用魔术棒工具替换背景?
  17. 第三方登陆--QQ登陆
  18. [ORACLE] ORA-00054 错误的解决方案
  19. React 全家桶入门教程 01
  20. Mybatis和MybatisPlus3.4的使用

热门文章

  1. 广州APP开发公司:婚纱摄影APP制作开发
  2. 【语音识别技术详解】如何让机器更好地理解人类语音
  3. Apifox和Apipost有什么区别?那个更有优势(接口工具)postman、jmeter等等、、、
  4. u盘盘符不显示 win10_Win10不显示U盘的盘符怎么办
  5. cocos2D插件转3D插件
  6. .NET开发工程师(中兴微品)
  7. mousewheel 取消_如何暂时取消绑定jquery.mousewheel
  8. 计算机专业毕业的学生还需要自己考等级证书吗
  9. Python案例分析:中美汇率转换(2)
  10. 实战项目-模仿天猫网站-笔记