访问者模式-

下边学习了访问者模式,和大家分享一下学习成果

//定义:为其他对象提供一种代理以控制对这个对象的访问

        //自己理解:委托代理去访问对象,让访问者和被访问对象分离,各不影响
        
        //使用场景:
        //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 ();
            }

        }
    }
}

猜你喜欢

转载自blog.csdn.net/yanwenwennihao/article/details/80426633