代理模式

来源:互联网 发布:中兴汽车怎么样 知乎 编辑:程序博客网 时间:2024/05/16 08:08

代理模式

里氏替换原则:子类型必须能够替换掉他们的父类型。

核心

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

好处

在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

例子

情景是:A追求李娇娇,但不认识,通过认识她的B来送礼物。B是代理,代替A完成送礼物的事情。(实现送礼物接口)

UML图

//被追求者类class SchoolGirl{    public string Name { get; set; }}//代理接口(送礼物)interface GiveGift{    void GiveDolls();    void GiveFlowers();    void GiveChocolate();} //追求者类class Pursuit : GiveGift{    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 Proxy : GiveGift{    private 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();    }}    

例子来源:Linux公社《大话设计模式》
实例代码在我的代码托管上

代理模式

0 0