代理模式

72 阅读1分钟

代理模式

为其他对象提供一种代理以控制对这个对象的访问。

说白了:A让B给C送礼物,C不认识A,B给C送的。

代理模式的应用:

①远程代理,就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
②虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样就可以达到性能的最优化。比如打开网页的图片有些还在加载那就是虚拟代理。
③安全代理,用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
④智能指引,指当调用真实的对象时,代理处理另外一些事。比如计算真实对象的引用次数,当对象没有引用时,可以自动释放。持久对象放入内存。

image.png image.png

class Program
    {
        static void Main(string[] args)
        {
            SchoolGirl gege = new SchoolGirl();
            gege.Name = "gege";
            Proxy daili = new Proxy(gege);
            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();
        }
    }
    //公共接口
    interface GiveGift
    {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    }
    class Pursuit : GiveGift
    {
        SchoolGirl mm;
        public Pursuit(SchoolGirl mm)
        {
            this.mm = mm;
        }
        public void GiveChocolate()
        {
            Console.WriteLine(mm.Name + "送你洋娃娃");
        }
            
        public void GiveDolls()
        {
            Console.WriteLine(mm.Name + "送你洋娃娃");
        }

        public void GiveFlowers()
        {
            Console.WriteLine(mm.Name + "送你巧克力");
        }
    }
    //代理类
    class Proxy : GiveGift
    {
        Pursuit gg;
        public Proxy(SchoolGirl mm)
        {
            gg = new Pursuit(mm);
        }
        public void GiveChocolate()
        {
            gg.GiveChocolate();
        }

        public void GiveDolls()
        {
            gg.GiveDolls();
        }

        public void GiveFlowers()
        {
            gg.GiveFlowers();
        }
    }

    //追求的女孩
    class SchoolGirl
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }