设计模式实践-代理模式

我的理解:代理模式是 对另一个类打包。用新的接口来替换原有接口。同时添加一些新功能。如:权限功能、引用计数功能等。

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

实例用了秀才委托小六向小郭送礼的逻辑。这里小六可以在送礼的同时做些什么。也可以对送出的礼物修改。

设计图如下:

 代码如下:

    class Program
    {
        public static void Run()
        {
            Gril gril = new Gril();
            gril.Name = "小郭";
            Boy boy = new Boy();
            boy.Name = "秀才";
            boy.SetGril("小郭");
            Proxy p = new Proxy();
            p.Name = "小六";
            p.SetBoy(boy);

            if (p.IsGril(gril.Name))
            {
                gril.收下礼物(p.送花());
                gril.收下礼物(p.送巧克力());
                gril.收下礼物(p.送口红());
            }

            gril.展示礼物();
        }
    }

    class Person
    {
        protected string _name;
        public string Name { get => _name; set => _name = value; }

    }

    class Gril : Person
    {
        private List<string> 礼物列表 = new List<string>();
        public void 收下礼物(string 礼物)
        {
            礼物列表.Add(礼物);
        }

        public void 展示礼物()
        {
            Console.WriteLine(Name + "收到的礼物有:" + string.Join(" ", 礼物列表));
        }
    }

    class Boy : Person
    {

        public string grilName;
        public void SetGril(string g)
        {
            this.grilName = g;
        }

        public void 送礼()
        {
            Console.Write(Name + "送给" + this.grilName);
        }
        public void 求婚()
        {
            Console.Write(Name + "求婚" + this.grilName);
        }
    }

    class Proxy : Person
    {
        private Boy boy;
        public void SetBoy(Boy b)
        {
            this.boy = b;
        }

        public bool IsGril(string grilName)
        {
            return boy.grilName == grilName;
        }

        public string 送花()
        {
            Console.Write(Name + "执行:");
            this.boy.送礼();
            Console.Write(" ");
            Console.WriteLine("鲜花");
            return "鲜花";
        }

        public string 送巧克力()
        {
            Console.Write(Name + "执行:");
            this.boy.送礼();
            Console.Write(" ");
            Console.WriteLine("巧克力");
            return "巧克力";
        }

        public string 送口红()
        {
            Console.Write(Name + "执行:");
            this.boy.送礼();
            Console.Write(" ");
            Console.WriteLine("口红");
            return "口红";
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值