大话设计-代理模式

Posted bibi-feiniaoyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计-代理模式相关的知识,希望对你有一定的参考价值。

记录大话设计学习过程。

代理模式:代理者为其他对象提供代理,以控制对真实对象的访问。

用户调用代理者,代理者通过真实的对象引用让对象去做事情。但是代理者可以附加一些功能,然后才让真实对象去做事情。

代理模式运用案例:WebService生成代理访问服务,虚拟代理、安全代理(控制真实对象访问时的权限)、智能引用。

技术图片
using System;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main(string[] args)
        {
            var girl = new SchoolGirl("邓紫棋");
            Proxy proxy = new Proxy(girl);
            proxy.GiveFlowers();
            proxy.GiveChocolate();
            proxy.GiveDolls();
        }
    }

    interface GiveGift
    {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    }

    class Pursuit : GiveGift
    {
        SchoolGirl girl;
        public Pursuit(SchoolGirl girl)
        {
            this.girl=girl;
        }

        public void GiveChocolate()
        {
            Console.WriteLine("送巧克力");
        }

        public void GiveDolls()
        {
            Console.WriteLine("送洋娃娃");
        }

        public void GiveFlowers()
        {
            Console.WriteLine("送花");
        }
    }

    class Proxy : GiveGift
    {
        Pursuit Pursuit;
        public Proxy(SchoolGirl girl)
        {
            Pursuit = new Pursuit(girl);
        }

        public void GiveChocolate()
        {
            this.Pursuit.GiveChocolate();
        }

        public void GiveDolls()
        {
            this.Pursuit.GiveDolls();
        }

        public void GiveFlowers()
        {
            this.Pursuit.GiveFlowers();
        }
    }

    internal class SchoolGirl
    {
        public string Name { get; set; }
        public SchoolGirl(string name)
        {
            this.Name = name;
        }
    }
}
View Code
using System;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();
        }
    }

    abstract class Subject
    {
        public abstract void Request();
    }

    class RealSubject : Subject
    {
        public override void Request()
        {
            Console.WriteLine("真实对象在请求");
        }
    }

    class Proxy : Subject
    {
        RealSubject realSubject;

        public Proxy()
        {
            this.realSubject = new RealSubject();
        }

        public override void Request()
        {
            // 写一堆附加功能代码.....
            realSubject.Request();
        }
    }
    
}

以上是关于大话设计-代理模式的主要内容,如果未能解决你的问题,请参考以下文章

大话设计-代理模式

大话设计模式-代理模式

java 之 代理模式(大话设计模式)

大话设计模式读书笔记——代理模式

大话设计模式之代理模式

《大话设计模式》——代理模式