Home

缓存更新模式

Cache Aside pattern 先更新数据库,成功后,让缓存失效,下次read就可以重建缓存。 这里也可以一个事务里先更新缓存在更新数据库。 Read Through 查询缓存如果miss,查找后端数据库,更新缓存。 Write Through read缓存miss,同read through一样,查找数据库,之后更新缓存。 write如果没有hit,直接更新数据库,如果hit,先更新缓存在更新数据库(同步操作) Write behind 先统一在缓存中,之后刷回数据库。

Read more

设计模式(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...

Read more

设计模式(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 __...

Read more

设计模式(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...

Read more

设计模式(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...

Read more

设计模式(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->...

Read more

设计模式(17)mediator模式

目的 用中介对象来封装一系列对象交互,使各个对象不需要显式的互相引用,可以独立的改变他们的之间的交互。 //中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。 //同事类定义:比如,每个具体同事类都应该知道中介者对象,也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。 //抽象国家 abstract class Country { protected $mediator; public function __construct(UnitedNations $_mediator) { $this->mediator = $_mediator; ...

Read more

设计模式(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...

Read more