设计模式之观察者模式(行为型)

编程

观察者模式定义: 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知

如何实现一个观察者模式

  • 独立于其他代码的核心功能将作为被观察者,其他代码则将转化为一组观察类。

Code实现(PHP)

//被观察者 UserRegisterService

class UserRegisterService

{

private $observer = [];

//注册依赖项

public function setObserver(string $observer) {

array_push($this->observer, $observer);

}

//注册用户

public function register() {

//处理注册逻辑

$userInfo = [

"user_id" => 1,

"user_name" => "山人有妙计"

];

//调用观察者,同步阻塞的实现方式

//一般这里都会异步实现,比如放入queue中

$this->handleDependObj($userInfo);

}

private function handleDependObj(array $userInfo) {

if (empty($this->observer)) {

return false;

}

foreach ($this->observer as $server) {

(new $server)->handleRegSuccess($userInfo);

}

return true;

}

}

//观察者

interface Observer

{

public function handleRegSuccess(array $data);

}

//发送通知

class RegNotificationObserver implements Observer

{

public function handleRegSuccess(array $userInfo) {

var_dump("你好" . $userInfo["user_name"] . "欢迎注册XX平台");

}

}

//发送优惠券

class RegPromotionObserve implements Observer

{

public function handleRegSuccess(array $userInfo) {

var_dump("你好" . $userInfo["user_name"] . ", 你已获得100元新人优惠券");

}

}

//调用

$service = new UserRegisterService;

$service->setObserver("RegPromotionObserve");

$service->setObserver("RegNotificationObserver");

$service->register();

观察模式使用场景

  • 当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。

  • 当应用中的一些对象必须观察其他对象时, 可使用该模式。但仅能在有限时间内或特定情况下使用。

 

一枚Code世界的搬运工。

以上是 设计模式之观察者模式(行为型) 的全部内容, 来源链接: utcz.com/z/519114.html

回到顶部