php例、観察者パターンを理解する

6734 ワード

/**   *   *   * : , , , , 。   *   * :   * ( ), , :   * 1、   * 2、   * 3、   * 4、 、 、   * 5、   *   * :   * , 。   *   * :   * 1、 , , 、 。   * 2、 , , 。   *   * " ", " ", 、 ,   * 。   *   * :   * 1、 2 : ( ) 、 ( )   * 2、 2 , 、   * 3、   * 4、 , 。   *   * :   *   */   date_default_timezone_set( 'PRC' ); // #=================== 、 ============ /**   *   * ( )   *   */ interface ITicketObserver // {    function onBuyTicketOver( $sender , $args ); // } /**   *   *   *   */ interface ITicketObservable // {    function addObserver( $observer ); // } #==================== ======================== /**   *   * ( )   *   */ class HipiaoBuy implements ITicketObservable { // ( )    private $_observers = array (); // ( )    public function buyTicket( $ticket ) // , {      // TODO      // , onBuyTicketOver      foreach ( $this ->_observers as $obs )        $obs ->onBuyTicketOver ( $this , $ticket ); //$this ,    }    //    public function addObserver( $observer ) // N {      $this ->_observers [] = $observer ;    } } #========================= ==================== // class HipiaoMSM implements ITicketObserver {    public function onBuyTicketOver( $sender , $ticket ) {      echo ( date ( 'Y-m-d H:i:s' ) . " : :$ticket
"
);    } } // class HipiaoTxt implements ITicketObserver {    public function onBuyTicketOver( $sender , $ticket ) {      echo ( date ( 'Y-m-d H:i:s' ) . " : :$ticket
"
);    } } // class HipiaoDiKou implements ITicketObserver {    public function onBuyTicketOver( $sender , $ticket ) {      echo ( date ( 'Y-m-d H:i:s' ) . " : :$ticket 10 1 。
"
);    } } #============================ ==================== $buy = new HipiaoBuy (); $buy ->addObserver ( new HipiaoMSM () ); // $buy ->addObserver ( new HipiaoTxt () ); $buy ->addObserver ( new HipiaoDiKou () ); // $buy ->buyTicket ( " " ); ?>
 
次のように動作します.2017-02-03 10:25:45 : : 2017-02-03 10:25:45 : : 2017-02-03 10:25:45 : : 10 1 。