设计模式详解 PHP版
  • 设计模式简介&原则
  • 常见设计模式
    • 工厂模式(Factory)
      • 简单工厂模式(Simple Factory)
      • 工厂方法模式(Factory Method)
      • 抽象工厂模式(Abstract Factory)
      • 三种工厂模式对比
    • 单例模式(Singleton)
      • 场景*memcache操作类
    • 注册树模式
    • 适配器模式(Adapter)
    • 策略模式(Strategy)
    • 数据对象映射模式
    • 观察者模式(observer)
    • 原型模式(Prototype)
    • 装饰器模式(Decorator)
    • 迭代器模式 (Iteration)
    • 桥接模式(Bridge)
    • 建造者模式(Builder)
    • 命令行模式(Command)
    • 组合模式(Composite)
    • 外观模式(Facade)
    • 享元模式(Flyweight)
    • 解释器模式(Interpreter)
    • 中介者模式(Mediator)
    • 备忘录模式(Memento)
    • 代理模式(Proxy)
    • 责任链模式(Responsibility Chain)
    • 状态模式(State)
    • 模板方法模式(Template Method)
    • 访问者模式(Visitor)
  • 资料
Powered by GitBook
On this page

Was this helpful?

  1. 常见设计模式

观察者模式(observer)

模式架构简单代码实现示例:

<?php
    interface IObserver{
        function onSendMsg( $sender, $args );
        function getName();
    }
    interface IObservable{
        function addObserver( $observer );
    }
    class UserList implements IObservable{
        private $_observers = array();
        public function sendMsg( $name ){
            foreach( $this->_observers as $obs ){
                $obs->onSendMsg( $this, $name );
            }
        }
        public function addObserver( $observer ){
            $this->_observers[]= $observer;
        }
        public function removeObserver($observer_name) {
            foreach($this->_observers as $index => $observer) {
                if ($observer->getName() === $observer_name) {
                    array_splice($this->_observers, $index, 1);
                    return;
                }
            }
        }
    }
    class UserListLogger implements IObserver{
        public function onSendMsg( $sender, $args ){
            echo( "'$args' send to UserListLogger\n" );
        }
        public function getName(){
            return 'UserListLogger';
        }
    }
    class OtherObserver implements IObserver{
        public function onSendMsg( $sender, $args ){
            echo( "'$args' send to OtherObserver\n" );
        }
        public function getName(){
            return 'OtherObserver';
        }
    }
    $ul = new UserList();//被观察者
    $ul->addObserver( new UserListLogger() );//增加观察者
    $ul->addObserver( new OtherObserver() );//增加观察者
    $ul->sendMsg( "Jack" );//发送消息到观察者
    $ul->removeObserver('UserListLogger');//移除观察者
    $ul->sendMsg("hello");//发送消息到观察者
Previous数据对象映射模式Next原型模式(Prototype)

Last updated 6 years ago

Was this helpful?