设计模式之代理模式
来源:互联网 发布:淘宝如何转企业店铺 编辑:程序博客网 时间: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)智能指引,是指当调用真实的对象时,代理处理另外一些事
代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之 代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-----代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 二叉搜索树(二叉查找树,二叉排序树)的详细实现
- iOS Auto Layout的使用
- 第七周工作总结——接收信号同步
- jquery(七)jquery动画大体验
- BOOST之scoped_ptr源码及与auto_ptr的区别
- 设计模式之代理模式
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 【IzPack】使用----install.xml
- 搜索引擎优化究竟是否简单?——北大青鸟
- JAVA基础(一) StringUtils中 isNotEmpty 和isNotBlank的区别
- 11 个惊人的 CSS3 和 jQuery 制作的教程收集
- 使用3.0实现微信打飞机——12.游戏结束场景
- hdoj.1319 Prime Cuts 20140821
- oracle分组统计查询之后,获取数量最大的记录