下边学习了访问者模式,和大家分享一下学习成果
//定义:为其他对象提供一种代理以控制对这个对象的访问
//自己理解:委托代理去访问对象,让访问者和被访问对象分离,各不影响//使用场景:
//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 ();
}
}
}
}