设计模式-代理模式
来源:互联网 发布:淘宝店铺后花园 编辑:程序博客网 时间:2024/06/15 01:32
案例:卓贾易拜托戴励给娇娇送礼物,追求娇娇
小菜的第一版代码(没有代理的代码):
//追求者类class Pursuit { public $mm; public function __construct(SchoolGirl $mm) { $this->mm = $mm; } public function GiveDolls() { echo "{$this->mm->GetName()} 送你洋娃娃\n"; } public function GiveFlowers() { echo "{$this->mm->GetName()} 送你鲜花\n"; } public function GiveChocolate() { echo "{$this->mm->GetName()} 送你巧克力\n"; }}//被追求者类class SchoolGirl { private $name; public function SetName($name) { $this->name = $name; } public function GetName() { return $this->name; }}//客户端代码$jiaojiao = new SchoolGirl();$jiaojiao->SetName("李娇娇");$zhuojiayi = new Pursuit($jiaojiao);$zhuojiayi->GiveDolls();$zhuojiayi->GiveFlowers();$zhuojiayi->GiveChocolate();
此版代码有个问题,$zhuojiayi = new Pursuit($jiaojiao);
这里娇娇并不认识卓贾易。
小菜的第二版代码(只有代理的代码):
//被追求者类class SchoolGirl { private $name; public function SetName($name) { $this->name = $name; } public function GetName() { return $this->name; }}//代理类class Proxy { public $mm; public function __construct(SchoolGirl $mm) { $this->mm = $mm; } public function GiveDolls() { echo "{$this->mm->GetName()} 送你洋娃娃\n"; } public function GiveFlowers() { echo "{$this->mm->GetName()} 送你鲜花\n"; } public function GiveChocolate() { echo "{$this->mm->GetName()} 送你巧克力\n"; }}//客户端代码$jiaojiao = new SchoolGirl();$jiaojiao->SetName("李娇娇");$daili = new Proxy($jiaojiao);$daili->GiveDolls();$daili->GiveFlowers();$daili->GiveChocolate();
此版代码还是有问题,$daili = new Proxy($jiaojiao);
虽然送花的变成了戴励,但是没有了卓贾易什么事了,变成戴励直接追娇娇了。
小菜的第三版代码:
//代理送礼物接口interface IGiveGift { public function GiveDolls(); public function GiveFlowers(); public function GiveChocolate();}//被追求者类class SchoolGirl { private $name; public function SetName($name) { $this->name = $name; } public function GetName() { return $this->name; }}//追求者类class Pursuit implements IGiveGift { public $mm; public function __construct(SchoolGirl $mm) { $this->mm = $mm; } public function GiveDolls() { echo "{$this->mm->GetName()} 送你洋娃娃\n"; } public function GiveFlowers() { echo "{$this->mm->GetName()} 送你鲜花\n"; } public function GiveChocolate() { echo "{$this->mm->GetName()} 送你巧克力\n"; }}//代理类class Proxy implements IGiveGift { public $gg; public function __construct(SchoolGirl $mm) { $this->gg = new Pursuit($mm); } public function GiveDolls() { $this->gg->GiveDolls(); } public function GiveFlowers() { $this->gg->GiveFlowers(); } public function GiveChocolate() { $this->gg->GiveChocolate(); }}//客户端代码$jiaojiao = new SchoolGirl();$jiaojiao->SetName("李娇娇");$daili = new Proxy($jiaojiao);$daili->GiveDolls();$daili->GiveFlowers();$daili->GiveChocolate();
这样就ok了,娇娇不认识追求她的卓贾易,但是却通过代理人戴励(娇娇认识的)得到礼物。
=============================
注:
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
阅读全文
0 0
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- Java虚拟机(JVM)概述
- sql优化
- ListView加入分割线
- AES算法
- keras multi gpu 分布式训练
- 设计模式-代理模式
- OC 与 Swift混编 Swift的闭包传值到OC中
- SDSOC rivision 编译文件缺少opencv头文件
- Go语言-程序实体与关键字
- 利用PHPExcel实现数据的导入导出
- Java实现的RGB转YUV420方法
- 完全二叉树 链式 非递归 插入建树
- Ajax的使用
- Android.mk介绍