设计模式之代理模式

来源:互联网 发布:淘宝如何转企业店铺 编辑:程序博客网 时间:2024/06/11 06:59

举例:

小明爱小丽,想送花,送玩具,送书给小丽,但是又不好意思,就委托其他人帮他做这些事情

1、因为小明委托其他人(代理人)帮他送花,送玩具,送书,因此二者具有相同的行为接口

首先定义一个接口,包含送花,送玩具,送书行为

/// <summary>
/// 统一送礼物接口
/// </summary>
interface ISenGift
{
           void SendFlower();
           void SendBook();
           void SendToy();
}


2、创建被追求这类Person

/// <summary>
/// 被追求者
/// </summary>
public class Person
{
          public string Name { get; set; }
}


3、创建追求者类(初始化被追求者)

/// <summary>
/// 追求者
/// </summary>
public class Pursuit:ISenGift
{
            public string Name { get; set; }
             //被追求者
            private Person _person;

           public Pursuit(Person person)
           {
                   _person = person;
           }

            public void SendFlower()
            {
                   Console.WriteLine("{0}送花给{1}",Name,_person.Name);
            }
            public void SendBook()
           {
                  Console.WriteLine("{0}送书给{1}", Name, _person.Name);
           }
            public void SendToy()
            {
                 Console.WriteLine("{0}送玩具给{1}", Name, _person.Name);
             }
}

4、代理人(初始化被代理的追求者)

/// <summary>
/// 代理人
/// </summary>
public class Proxyer:ISenGift
{
           //追求者
          private Pursuit _pursuit;
          public Proxyer(Pursuit pursuit)
          {
                 _pursuit = pursuit;
          }

          public void SendFlower()
          {
               _pursuit.SendFlower();
         }
         public void SendBook()
        {
             _pursuit.SendBook();
        }
         public void SendToy()
        {
             _pursuit.SendToy();
         }
}


5、客户端代码:

//被追求者
DevelopModel.ProxyModel.Person person = new ProxyModel.Person();
person.Name = "小丽";
//追求者(初始化被追求者)
Pursuit pursuit = new Pursuit(person);
pursuit.Name = "小明";
//代理人(初始化被代理的追求者)
Proxyer proxcyer = new Proxyer(pursuit);

//代理人帮小明送礼物

proxcyer.SendFlower();
proxcyer.SendBook();
proxcyer.SendToy();


6.代理模式的应用:

(1)远程代理:也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实

(2)虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象

(3)安全代理,用来控制真实对象访问时的权限

(4)智能指引,是指当调用真实的对象时,代理处理另外一些事

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

0 0