zoukankan      html  css  js  c++  java
  • 观察者模式

    原文链接:http://www.orlion.ga/719/

    解释:

        观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。

    代码:

        首先是CD类:

    namespace Observer;
    
    class CD{
    
    	public $title;
    
    	public $band;
    
    	protected $_observers = [];
    
    	public function __construct($title , $band) {
    		$this->title = $title;
    		$this->band = $band;
    	}
    
    	public function attachObserver($type ,CDObserver $observer) {
    		$this->_observers[$type][] = $observer;
    	}
    
    	public function notifyObserver($type) {
    		if (isset($this->_observers[$type])) {
    			foreach ($this->_observers[$type] as $observer) {
    				$observer->update($this);
    			}
    		}
    	}
    
    	public function buy() {
    		echo 'CD buy';
    		$this->notifyObserver('purchased');
    	}
    }

        其中attachObserver()方法注入CD的观察者,而notifyObserver()方法则是通知CD的观察者们,之所以加了一个type是为了更好的对CD的观察者进行分类管理。(也可以理解为不同的事件对应不同的观察者)

        然后就是它的观察者接口CDObserver:

    namespace Observer;
    interface CDObserver{
    	function update(CD $cd);
    }

        然后是观察者的实现SendEmailObserver:

    namespace Observer;
    
    class SendEmailObserver implements CDObserver{
    	public function update(CD $cd) {
    		echo $cd->title . "被卖出去了";
    	}
    }

        在App.php中运行:

    require 'CD.php';
    require 'CDObserver.php';
    require 'SendEmailObserver.php';
    
    $cd = new ObserverCD('whats' , 'Simple Plan');
    $sendEmailObserver = new ObserverSendEmailObserver();
    $cd->attachObserver('purchased' , $sendEmailObserver);
    $cd->buy();

       

        

  • 相关阅读:
    Codeforces Round #604(Div. 2,
    简单的三层框架以及使用dbutils进行数据库操作(入门)
    DBUtil数据库工具封装
    GUI 中监听 文本框实时改变的实例
    java基础教程GUI
    Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合
    计算器代码
    记事本应用程序java源代码
    GUI
    dbutils开源项目用法
  • 原文地址:https://www.cnblogs.com/orlion/p/5350904.html
Copyright © 2011-2022 走看看