下边学习了访问者模式,和大家分享一下学习成果
//定义:为其他对象提供一种代理以控制对这个对象的访问
//使用场景:
//1、远程代理——为一个对象在不同的地址空间提供局部代表
//2、虚拟代理——根据需要创建开销很大的对象(大型浏览器中未打开的图片使用虚拟代理)
//3、安全代理——用来控制真实对象访问时的权限
//4、智能指引——当调用真实对象时,代理处理另外一些事
//思考:
//1、为什么是代理者调用真正的追求者呢? 自己理解:代理要去实施任何一个追求者的动作,所以代理要去调用真实追求者的动作,如果反过来,那代理的意义就不大
//2、为什么让代理者和追求者是继承一个父类呢?自己理解:方便代理者在任何时候调用追求者的行动,实现追求者的愿望
//3、为什么属于结构型设计模式?自己理解结构型模式设计如何组合类以及获得更大的结构,采用继承机制,描述如何对一些对象惊醒组合,实现新功能
//好处:让访问者和被访问者分离,实现解耦;一个代理可以替多个访问者实现愿望;被访问者值接触代理就OK
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 代理模式 { class Program { //定义:为其他对象提供一种代理以控制对这个对象的访问 static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request();//实例化代理,让代理去实施方法 Console.Read(); } abstract class Subject { public abstract void Request(); } class RealSubject : Subject { public override void Request() { Console.WriteLine("真实的请求"); } } class Proxy : Subject { RealSubject realsubject;//要调用RealSubject的方法,所以此处需要声明,体现关联关系,一个类需要另一个类的帮助 public override void Request() { if(realsubject ==null)//判断是否为空,如果为空则实例化真实的追求者,此处体现代码的严谨性 { realsubject =new RealSubject (); } realsubject .Request (); } } } }