苏州妇产科哪个医院好:常用设计模式之观察者模式
来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 19:17:54
观察者模式(Observer Pattern): 观察者模式必须包含两个角色:观察者(Observer)和被观察对象(Observable)。观察者和被观察者之间存在“观察”的逻辑关系。当被观察着发生改变时,观察者就会观察到这样的变化,并作出相应的相应。观察者模式完美地将观察者和被观察者的对象分离开。 观察者模式的实现通常是一个对象通过添加一个方法使本身变得可观察(Observable)。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者(Observer)使用该信息执行的操作与可观察的对象(Observable)无关。 下面以系统中的用户列表为例,当新添加用户时,用户列表记录器(观察者)可以观察此列表(被观察者),代码如下: interface IObserver {
function onChanged($sender, $args);
} interface IObservable {
function addObserver($observer);
} class UserList implements IObservable {
private $_observers = array();
function addObserver($observer) {
$this->_observers[] = $observer;
}
function addUser($name) {
foreach($this->_observers as $obj) {
$obj->onChanged($this, $name);
}
}
function __toString() {
return "UserList";
}
} // 只使用一个UserListLogger实例进行观察
class UserListLogger implements IObserver {
private static $instance = null;
private function __construct() {}
public static function getInstance() {
if(self::$instance == null) {
self::$instance = new UserListLogger();
}
return self::$instance;
}
function onChanged($sender, $args) {
echo $args . "被添加到用户列表" . $sender . "中
";
}
} $ul = new UserList();
$ul->addObserver(UserListLogger::getInstance());
$ul->addUser("赵二");
$ul->addUser("张三"); $ul2 = new UserList();
$ul2->addObserver(UserListLogger::getInstance());
$ul2->addUser("李四"); $ul->addUser("王五");
?> 观察者模式的类关系图: 观察者模式的运行结果:
function onChanged($sender, $args);
} interface IObservable {
function addObserver($observer);
} class UserList implements IObservable {
private $_observers = array();
function addObserver($observer) {
$this->_observers[] = $observer;
}
function addUser($name) {
foreach($this->_observers as $obj) {
$obj->onChanged($this, $name);
}
}
function __toString() {
return "UserList";
}
} // 只使用一个UserListLogger实例进行观察
class UserListLogger implements IObserver {
private static $instance = null;
private function __construct() {}
public static function getInstance() {
if(self::$instance == null) {
self::$instance = new UserListLogger();
}
return self::$instance;
}
function onChanged($sender, $args) {
echo $args . "被添加到用户列表" . $sender . "中
";
}
} $ul = new UserList();
$ul->addObserver(UserListLogger::getInstance());
$ul->addUser("赵二");
$ul->addUser("张三"); $ul2 = new UserList();
$ul2->addObserver(UserListLogger::getInstance());
$ul2->addUser("李四"); $ul->addUser("王五");
?> 观察者模式的类关系图: 观察者模式的运行结果:
常用设计模式之观察者模式
设计模式之Observer 观察者模式
常用设计模式之简单工厂模式
常用设计模式之策略模式
常用设计模式收集
设计模式之Prototype 原型模式
设计模式之Builder 生成器模式
设计模式之Template 模板模式
设计模式之Mediator 中介者模式
设计模式之Interpreter 解释器模式
设计模式之Composite 组成模式 树模式
设计模式之Bridge 桥接模式 Bridge模式
研磨设计模式之桥接模式-3
设计模式之Chain of Responsibility 职责链模式
GoF设计模式之十六 Iterator- -
薪酬模式设计探讨
薪酬模式设计探讨 -
数据库模式设计
设计模式概述1
GOF 23设计模式
设计模式---代理模式(Proxy Pattern)
设计模式18:Visitor Pattern (访问者模式)
设计模式20:Strategy Pattern (策略模式)
设计模式22:Mediator Pattern (调解者模式)