Home

设计模式(14)Command模式

目的 请求封装成一个对象,用不同的请求对客户端进行参数化,对请求排队或记录日志,以及可以撤销的操作。 实现 abstract class Command { protected $receiver; public function __construct($receiver){ $this->receiver = $receiver; } public abstract function excute(); } class Invoker { protected $commands; public function setCommand(Command $command){ $this->commands[] = $com...

Read more

设计模式(13)chain of responsibility模式

目的 使多个对象都可以处理请求,从而避免请求发送者和接受者的耦合关系。 实现 abstract class Handler { protected $handler; function setSuccessor(Handler $handler){ $this->handler = $handler; } public abstract function HandlerRequest(); } class ConcreteHandler1 extends Handler { public function HandlerRequest(){ //要么自己处理,要么传出去(增加某些条件) if($this->handl...

Read more

设计模式(12)proxy模式

目的 为其他对象提供代理以控制对象的访问 适用性 远程代理 为一个对象在不同地址空间提供局部代表 ,(通过对象转发到不同的地址去) 虚代理 延迟加载,先创建一个小对象,真正用的时候再创建 保护代理 访问增加权限控制 智能指引 取代简单指针 a. 在访问时附加操作,增加引用计数,为0时自动释放 b. 第一次引用持久对象,放入内存 c. 访问前判断是否被锁定,锁定不让改变 实现 主要有两种静态和动态 abstract class Subject { public abstract function Request(); } class RealSubject extends Subject { public function Req...

Read more

设计模式(11)flyweight模式

目的 共享大量细粒度的对象。 /** * 抽象享元角色 */ abstract class Flyweight { /** * 示意性方法 * @param string $state 外部状态 */ abstract public function operation($state); } /** * 具体享元角色 */ class ConcreteFlyweight extends Flyweight { private $_intrinsicState = null; /** * 构造方法 * @param string $state 内部状态 */ public function __construct(...

Read more

设计模式(10)facade模式

目的 为子系统接口提供统一的界面,子系统更容易使用,定义一组高级接口 实现 对子系统做统一的封装,这里就不做例子说明,可以参考下laravel,很多facade

Read more

设计模式(9)decorator模式

目的 动态给类增加额外的功能,比子类更加灵活。 实现 abstract class Component{ public abstract function operation(); } class ConcreteComponent extends Component{ public function operation(){ echo "我是被装饰的类的方式!!!"; } } abstract class Decorator extends Component{ protected $component; } class ConcreteDecoratorA extends Decorator{ private $decoratorA; f...

Read more

设计模式(8) Composite模式

目的 组合成树形结构的“整体-部分”。 实现 abstract class MenuComponent { public $name; public abstract function getName(); public abstract function add(MenuComponent $menu); public abstract function remove(MenuComponent $menu); public abstract function getChild($i); public abstract function show(); } class MenuItem extends...

Read more