大话设计-代理模式

记录大话设计学习过程。

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

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

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

}
(0)

相关推荐

  • 结构型模式之代理模式

    在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象. 定义与特点 由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不 ...

  • 大话设计模式笔记(五)の代理模式

    举个栗子 故事是这样的... 一个小伙子喜欢上了隔壁班的一个妹子,但是又不认识,也害羞不好意思主动去说话,于是拜托了同样在这个班的一个朋友去传递自己想要送的礼物... 代码实现 该模式就不上什么简单实 ...

  • 设计模式之代理模式(proxy pattern)

    代理模式的本质是一个中间件,主要目的是解耦合服务提供者和使用者.使用者通过代理间接的访问服务提供者,便于后者的封装和控制.是一种结构性模式. 1.目的 为外部调用者提供一个访问服务提供者的代理对象. ...

  • PHP设计模式之代理模式

    PHP设计模式之代理模式 代理人这个职业在中国有另外一个称呼,房产经济人.保险经济人,其实这个职业在国外都是叫做房产代理或者保险代理.顾名思义,就是由他们来帮我们处理这些对我们大部分人来说都比较生疏的 ...

  • 大话设计-模板方法模式

    在基类定义算法的结构,具体实现延迟到子类. using System; namespace ConsoleApp2 { class Program { static void Main(string[ ...

  • 设计模式(十三)——代理模式

    设计模式(十三)——代理模式

  • 代理模式

    为什么要学习代理模式?因为这就是Spring AOP的底层机制![Spring AOP 和 Spring MVC] 1.什么是代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在 ...

  • 商业模式:会设计赚钱模式,才能创业

    2021-04-14 08:41:20 什么是商业模式?就是能够躺着持续赚钱的工具. 为什么要做商业模式设计?中国企业年存活率只有2.9年:餐饮行业每天有2.8万家倒闭:还有无数的企业负债经营.大部分 ...

  • [PHP小课堂]PHP设计模式之代理模式

    [PHP小课堂]PHP设计模式之代理模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 如何运用EDIUS代理模式

    当我们导入高清的长视频到EDIUS中时,播放就会出现卡顿的现象,播放速度就会变慢,这样就给后期剪辑工作带来了一些麻烦,这时候我们就会想办法解决这个问.其实,在EDIUS视频编辑软件中代理模式就可以很好 ...

  • 特斯拉直营模式能否持续?一文读懂直营、授权、代理模式前世今生|4s店|上海大众

    2021-04-27 19:15:18 来源: 电车人 2021年3月27-28日,电车人学院"雄鹰计划"总裁班(黄埔二期)第4次课·市场与产品专题在北京万集科技举办,来自整车.核 ...