[设计模式]代理模式

代理模式简而言之就是A拥有的功能B也有。



何时使用

想要访问一个类时做一些控制。

举例说明:

1. 某个化妆品制造商大量生产化妆品并且贩售,但消费者并不会直接跟工厂买货品而是去百货公司专柜买。

    则百货公司专柜 即为 代理

2. 想要买最新出版的IPHONE但目前中国台湾尚未贩卖,则需要找代购商购买

   代购商 即为 代理

实例:

音乐铃工厂生产音乐铃 (musicBoxProduce) 并且贩卖,并在华山 设点 (proxyStore) 贩售给消费者。

则贩售音乐铃为一个界面,生产工厂以及华山继承界面上的动作并且实践。

 

代码

IsellMusicBox.cs

namespace LearnPattern.ProxyPattern
{
    interface IsellMusicBox
    {
        void sellMusicBox();
    }
}

musicBoxProduce.cs

namespace LearnPattern.ProxyPattern
{
    class musicBoxProduce : IsellMusicBox
    {
        string CustName;
        public musicBoxProduce(string custName)
        {
            CustName = custName;
        }


        public void sellMusicBox()
        {
            Console.Write("sell box to " + CustName);
        }
    }
}

proxyStore.cs

namespace LearnPattern.ProxyPattern
{
    class proxyStore : IsellMusicBox
    {
        musicBoxProduce m;
        public proxyStore(string custName)
        {
            m = new musicBoxProduce(custName);
        }

        public void sellMusicBox()
        {
            m.sellMusicBox();
        }
    }
}

proxyMain.cs


namespace LearnPattern.ProxyPattern
{
    class proxyMain
    {
        static void Main(string[] arg)
        {
            proxyStore p = new proxyStore("77");
            p.sellMusicBox();
            Console.ReadLine();
        }
    }
}

output


当初我以为代理主要是将繁忙的运算代理出来,但其实是颠倒的。

主要是将功能 是为了保护实际对象 让只有真正需要实践 主要对象时 才使用

已减少系统开销


参考数据

http://www.runoob.com/design-pattern/proxy-pattern.html

https://segmentfault.com/a/1190000002510537

https://blog.csdn.net/carson_ho/article/details/54910472