设计模式之观察者模式(行为型)
观察者模式定义: 在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知
如何实现一个观察者模式
独立于其他代码的核心功能将作为被观察者,其他代码则将转化为一组观察类。
Code实现(PHP)
//被观察者 UserRegisterServiceclass 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