码迷,mamicode.com
首页 > 其他好文 > 详细

大话设计-代理模式

时间:2020-03-12 23:32:21      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:color   ons   sys   err   pac   通过   class   names   namespace   

记录大话设计学习过程。

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

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

代理模式运用案例: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();
        }
    }
    
}

大话设计-代理模式

标签:color   ons   sys   err   pac   通过   class   names   namespace   

原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/proxy.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!