设计模式之代理模式

来源:互联网 发布:java串口编程教程 编辑:程序博客网 时间:2024/05/17 02:55

      概念:为其他对象提供一种代理以控制对这个对象的访问。在一些特定情况下,当一个对象不适合或者不能直接引用另一个对象时,代理对象就可以在客户端和目标对象之间起到中介的作用。


     特点:

            1、代理模式中的原类和代理类继承同一父类。

              2、原来的类包含的对象与代理类对象功能相同。

       3、代理模式的使用起到了将原来的类隐藏的效果。

  

   结构图:

         

    

  适用范围:

     1、为一个在不同地址空间的对象提供局部代表达到以藏一个对象属于不同地址空间实施的目的。

     2、用于存放实例化需要很长时间的对象。

     3、用于控制真实访问时的权限 。

     4、当调用真实对象时,代理处理另外一些事。


    代码实现:

       

namespace 代理模式7._4{    interface IGiveGift    {        void GiveDolls();        void GiveFlowers();        void GiveChocolate();    }    class Pursuit: IGiveGift     {        SchoolGirl mm;        public Pursuit(SchoolGirl mm)        {            this.mm = mm;        }        public void GiveDolls()        {            Console.WriteLine(mm.Name + "送你洋娃娃");        }        public void GiveFlowers()        {            Console.WriteLine(mm.Name + "送你鲜花");        }        public void GiveChocolate()        {            Console.WriteLine(mm.Name + "送你巧克力");        }    }    class SchoolGirl    {        private string name;        public string Name        {            get { return name; }            set { name = value; }        }    }           class Proxy : IGiveGift        {            Pursuit gg;            public Proxy(SchoolGirl mm)            {                gg = new Pursuit (mm);            }            public void GiveDolls()            {                gg.GiveDolls();            }            public void GiveFlowers()            {                gg.GiveFlowers();            }            public void GiveChocolate()            {                gg.GiveChocolate();            }        }        class Program        {            static void Main(string[] args)            {                SchoolGirl jiaojiao = new SchoolGirl();                jiaojiao.Name = "李娇娇";                Proxy daili = new Proxy(jiaojiao);                daili.GiveDolls();                daili.GiveFlowers();                daili.GiveChocolate();                Console.Read();            }        }    }

总结:代理模式有职责清晰、隐藏保护目标对象及减少耦合增加可扩展性的优点。但是有时代理模式的使用也会因为在客户端和真实主题之间增加了代理对象而造成请求的处理速度变慢的情况发生。并且由于代理对象的存在一定程度上增加了额外的工作,增加了代码的复杂程度。

0 0