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();

       

        

  • 相关阅读:
    Spring boot 集成三种拦截方式
    Spring boot 异常处理配置
    Linux 启动、停止、重启tomcat工具(Shell脚本)
    Java 序列化对象工具类
    Spring boot 集成 Swagger
    Spring boot 项目导出可执行jar
    包扫描自定义注解类并实例化
    Zuul 网关搭建
    Hystrix + Hystrix Dashboard搭建(Spring Cloud 2.X)
    Feign + Hystrix 服务熔断和服务降级
  • 原文地址:https://www.cnblogs.com/orlion/p/5350904.html
Copyright © 2011-2022 走看看