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