php设计模式 四 (观察者 原型模式 迭代器模式)

观察者模式

观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。当一个对象的状态发生改变时,依赖他的对象全部会接到通知,并自动更新。观察者模式实现了低耦合 非入侵式的通知与更新机制。观察者模式示例:首先创建一个事件生成器EventGenerator.php

<?phpnamespace Components\ObServer;abstract class EventGenerator {private $obServers = array();function addObServer(IObServer $obServer) {//添加事件$this->obServers[] = $obServer;}function notify() {foreach ($this->obServers as $obServer) {//一一执行更新$obServer->update();}}}创建一个观察者接口IObServer.php<?phpnamespace Components\ObServer;interface IObServer {function update($event_info = NULL);}事件主体:class Event extends \Components\ObServer\EventGenerator{function tringger() {echo "<br>Event<br/>";$this->notify();}}观察者://观察者1class ObServer1 implements \Components\ObServer\IObServer {function update($event_info = null) {echo "logic1<br>";}}//观察者2class ObServer2 implements \Components\ObServer\IObServer {function update($event_info = null) {echo "logic2<br>";}}触发:$event = new Event();$event->addObServer(new ObServer1());$event->addObServer(new ObServer2());$event->tringger();原型模式

与工厂模式类似,用于创建对象,不同的是原型模式先创建好一个原型对象,通过clone原型对象来创建新的对象,,如此就避免了类创建时的重复的初始化操作,一般用于大对象的创建,免去了每次new的重复消耗,而只是内存拷贝。它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。示例代码:

/* 原型模式 */class BigClass {function init() {;}function exec($tpye) {echo "prototype$tpye<br>";}}/** * 原型用户大对象的创建 节约资源 */$prototype = new BigClass();$prototype->init();$bigClass1 = clone $prototype;$bigClass2 = clone $prototype;$bigClass1->exec(1);$bigClass2->exec(2);迭代器模式

在不需要了解内部实现的情况下,遍历一个聚合对象的内部元素。相比传统编程模式,迭代器模式可以隐藏遍历元素所需操作迭代器示例UserIterator.php

<?phpnamespace Components\Iterator;use Components\Register;use Components\Factory;class UserIterator implements \Iterator {protected $ids;protected $data = array();protected $index;function __construct() {$db = Register::get('slave');$result = $db->query('select id from users');$this->ids = $result->fetch_all(MYSQL_ASSOC);}//1function rewind(){$this->index = 0;}//2function valid(){return $this->index < count($this->ids);}//3function current() {return Factory::getUser($this->ids[$this->index]['id']);}//4function next() {++$this->index;}//5function key() {return $this->index;}}使用:/* 迭代器模式 */$users = new UserIterator();foreach ($users as $user) {var_dump($user);}

前有阻碍,奋力把它冲开,运用炙热的激情,

php设计模式 四 (观察者 原型模式 迭代器模式)

相关文章:

你感兴趣的文章:

标签云: