观察者模式

<?php

/**
 * @Author: Fyang
 * @Email:  admin@fyang.vip
 * @Date:   2020-08-06 18:07:50
 * @Last Modified by:   峰扬
 * @Last Modified time: 2020-08-06 18:34:24
 * @Project_name:    test
 * Description    :    观察者模式
 */
/**
 * 登录完成后需要:
 * 1、发送短信
 * 2、发送邮件
 * 3、推送活动
 * 4、登录统计次数
 */


/**
 * 被观察者抽象类
 * 预定义一个准则类(接口) 所有后续完成的业务都需要继承此类(按照此准则工作)
 */
interface Subject{
    public function register(Observer $observer);

    public function notify();

}


/**
 * 被观察者
 * 实现被观察者抽象类
 */
class Action implements Subject{

    public $_observers = [];

    public function register(Observer $observer){
        $this->_observers[] = $observer;
    }

    public function notify(){

        foreach ($this->_observers as $observer) {
            $observer->watch();
        }

    }
 }



/**
 * 观察者接口
 * 预定义一个准则类(接口) 所有后续完成的业务都需要继承此类(按照此准则工作)
 */
interface Observer{

    //具体实现方法
    public function watch();
}





/**
 * 观察者
 * 1、发送短信
 */
class Sms implements Observer{
    public function watch(){
        echo "this Sms class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 2、发送邮件
 */
 class Email implements Observer{
    public function watch(){
        echo "this Email class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 3、推送活动
 */
 class Activity implements Observer{
    public function watch(){
        echo "this Activity class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 4、登录统计次数
 */
 class Count implements Observer{
    public function watch(){
        echo "this Count class".PHP_EOL.PHP_EOL;
    }
 }


$action = new Action;


$action->register(new Sms());
$action->register(new Email());
$action->register(new Activity());
$action->register(new Count());


print_r($action->notify());

添加新评论