设计模式(22)visitor模式
目的
访问者模式就是表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
abstract class Visitor{
abstract function visitConcreteElementA($a);
abstract function visitConcreteElementB($b);
}
class ConcreteVisit1 extends Visitor{
function visitConcreteElementA($a){
echo "visitor1";
$a->operationA();
}
function visitConcret...
设计模式(21)strategy模式
目的
定义一个算法,把它们封装起来,并且可以相互替换。
abstract class Strategy{
abstract function algorithm();
}
class ConcreteStrategyA extends Strategy{
function algorithm(){
echo "ConcreteStrategyA";
}
}
class ConcreteStrategyB extends Strategy{
function algorithm(){
echo "ConcreteStrategyB";
}
}
class Context{
private $strategy;
function __...
设计模式(20)state模式
目的
对象在其内部状态改变时改变它的行为。
class Context {
protected $state;
public function setState($s){
$this->state = $s;
}
public function request(){
$this->state->handle();
}
}
abstract class State{
abstract function handle();
}
class ConcreteStateA extends State{
protected $context;
function __construct($context){
$thi...
设计模式(19)observer模式
目的
定义对象之间一对多的以来关系,当一个对象改变时所有依赖他的对象都得到通知并自定更新。
abstract class Subject{
protected $observers;
public function attach(Observer $m){
$this->observers[] = $m;
}
public function detach(Observer $m){
unset($this->observers[array_search($m,$this->observers)]);
}
public function notify(){
foreach($this->observer...
设计模式(18)memento模式
目的
不破坏内部封装性的前提下,捕获一个对象的内部状态 ,并在对象之外保存这个状态,以便之后恢复到这个状态。
class originator
{
private $state1;
private $state2;
public function setState($state1,$state2){
$this->state1 = $state1;
$this->state2 = $state2;
}
public function setMemento(Memento $m){
$this->state1 = $m->getState1();
$this->state2 = $m->...
设计模式(17)mediator模式
目的
用中介对象来封装一系列对象交互,使各个对象不需要显式的互相引用,可以独立的改变他们的之间的交互。
//中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。
//同事类定义:比如,每个具体同事类都应该知道中介者对象,也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。
//抽象国家
abstract class Country
{
protected $mediator;
public function __construct(UnitedNations $_mediator)
{
$this->mediator = $_mediator;
...
设计模式(16)iterator模式
目的
提供一个方法顺序访问一个聚合对象中的各个元素又不暴露该对象的内部表示。
实现
abstract class IIterator
{
public abstract function First();
public abstract function Next();
public abstract function IsDone();
public abstract function CurrentItem();
}
//具体迭代器
class ConcreteIterator extends IIterator
{
private $aggre;
private $curr...
66 post articles, 9 pages.