观察器模式在PHP设计模式中的应用
观察类:
1。抽象主题角色:主题角色在一个集合中保留对观察对象的所有引用,每个主题可以是任意多个观察者。
2。抽象观察角色:为所有特定的观察者定义一个接口,并在观察到的主题变化时更新自己。
3、特定的主题角色是将相关的状态存储到特定的观察对象,并在特定主题的内部状态发生变化时通知所有注册的观察者。
4、观察者的角色是存储一个特定的主体对象,存储相关的状态,并实现抽象的观察者角色的更新接口,以保持其状态和主题状态一致。
uff1a效应
1的耦合度。观察员模式很小。
2。支持广播通信
复制代码代码如下所示:
< PHP
抽象/主题
界面主题{
公共职能附加(观察员);
公共功能分离($观察员);
公共功能notifyobservers();
}
特定主题
类concreatesubject实施主体{
私人_observers美元;
公共功能__construct(){
美元-> _observers =阵();
}
公共职能附加(观察员){
返回array_push(美元-> _observers,为观察者);
}
公共函数分离($观察者){
美元指数= array_search($观测器,美元-> _observers);
如果(美元指数=假| |!array_key_exists(美元指数,美元-> _observers)){
返回false;
}
unset(美元-> _observer { $指数});
返回true;
}
公共功能notifyobservers(){
如果(!is_array(美元-> _observers)){
返回false;
}
foreach(美元-> _observers达观测器){
观察者> >更新();
}
返回true;
}
}
抽象/观察者
界面观察{
公共功能更新();
}
/ /具体观察者
类concreteobserver实施观察{
私人_name美元;
公共功能__construct($name){
美元-> _name = $名称;
}
公共函数更新(){
echo'observer,美元-> _name通知;
}
}
客户机
客户端类{
公共静态函数main(){
为主题的新ConcreteSubject();
第一个观察者添加/添加
observer1美元=新concreteobserver('martin);
主题->附加美元(美元observer1);
通知
受美元-> notifyobservers();
第二个新观察者
observer2美元=新concreteobserver('jaky);
主题->附加美元(美元observer2);
通知
受美元-> notifyobservers();
删除观察员1
主题-> deatch美元(美元observer1);
通知
受美元-> notifyobservers();
}
}
客户::主();
>