<?php /** * 2.7 代理模式 * 定义: * 为其他对象提供一种代理以控制对这个对象的访问。 * 角色: * 1. 代理抽象角色 * 职责:统一代理和被代理角色接口 * 2. 被代理角色 * 职责: * 3. 代理角色 * 职责:代理角色2,并对角色2进行访问控制. * 优点: * 1. 职责清晰 * 2. 高扩展性 * 3. 智能化 * 缺点: * 1. 由于客户端和真实主题之家增加了代理对象,因此有些 * 类型的代理模式可能会造成请求的处理速度慢。 * 2. 实现代理模式需要额外,有些代理模式的实现非常复杂 * 使用场景: * 1. 远程代理 * 2. 虚拟代理 * 3. 安全代理 * 4. 智能指引 */ header('content-type:text/html;charset=utf8'); //被追求者类 class SchoolGirl{ private $name; public function __construct($name){ $this->name=$name; } public function getName(){ return $this->name; } } //代理接口。针对接口编程,符合了依赖倒转原则。 abstract class GiveGift{ abstract public function giveDolls(); abstract public function giveFlowers(); abstract public function giveChocolate(); } //追求者类 class Pursuit extends GiveGift{ private $mm; public function __construct(SchoolGirl $mm){ $this->mm=$mm; } public function giveDolls(){ echo $this->mm->getName().'送你洋娃娃'; } public function giveFlowers(){ echo $this->mm->getName().'送你鲜花'; } public function giveChocolate(){ echo $this->mm->getName().'送你巧克力'; } } //代理者,它与追求者的功能(方法)一样,只不过起到了一个 //代理的作用,实际的东西(功能)依然是追求者的。代理者 //送的东西依然是追求者的。 class Proxy extends GiveGift{ private $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(); } } //客户端 $proxy1=new Proxy(new SchoolGirl('韩梅梅')); $proxy1->giveDolls(); echo '<br/>'; $proxy1->giveFlowers(); echo '<br/>'; $proxy1->giveChocolate();
设计模式之结构型模式—— 2.7 代理模式
原创great_yonchin 博主文章分类:设计模式 ©著作权
©著作权归作者所有:来自51CTO博客作者great_yonchin的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
设计模式------JAVA代理模式与动态代理模式
JAVA代理模式与动态代理模式
JAVA 代理模式 动态代理模式 -
Java与设计模式-代理模式
代理模式也称为委托模式,属于结构型设计模式,为其他对象提供一种代理,以控
java 工厂模式 代理模式 代理类 -
设计模式:策略模式与代理模式等的区别
策略模式、代理模式、适配器模式区别 简单代理模式中,代理类知道被代理类的行为,因为代
设计模式 java 数据库 策略模式 代理类 -
设计模式——代理设计模式
学习了一下代理设计模式,顺便记
android 动态代理 ide