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