<?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();
时间: 2024-10-24 11:11:43