PHP设计模式——观察者模式

简介: 声明:本系列博客参考资料《大话设计模式》,作者程杰。         观察者模式(有时又被称为发布-订阅模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。

声明:本系列博客参考资料《大话设计模式》,作者程杰。


        观察者模式(有时又被称为发布-订阅模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。


            UML类图:

      


       重要角色:

       抽象通知者角色(INotifier):定义了通知的接口规则。

       具体通知者角色(Boss):实现抽象通知者的接口,接到状态改变立即向观察者下发通知

       抽象观察者角色(IObserver):定义接到通知后所做的操作(Update)接口规则。

       具体观察者角色(JingDong):实现具体操作方法。


       核心代码:

      

//抽象通知者
abstract class Subject
{
    private $observers = array();

    public function  Attach(Observer $observer)
    {
        array_push($this->observers,$observer);
    }

    public function  Detach(Observer $observer)
    {
        foreach($this->observers as $k=>$v)
        {
            if($v==$observer)
            {
                unset($this->observers[$k]);
            }
        }
    }

    function  Notify()
    {
        foreach($this->observers as $v)
        {
            $v->Update();
        }
    }
}

//具体通知者(Boss和Secretary)
class ConcreteSubject extends Subject
{
   public $subject_state;
}

//抽象观察者
abstract class Observer
{
    public abstract function Update();
}

//具体观察者
class ConcreteObserver extends Observer
{
    private $name;
    private $observerState;
    public $subject;

    public function __construct(ConcreteSubject $_sub,$_name)
    {
        $this->subject = $_sub;
        $this->name = $_name;
    }

    public function  Update()
    {
        $this->observerState = $this->subject->subject_state;
        echo "观察者".$this->name."的新状态是:".$this->observerState."<br/>";
    }
}


            调用客户端代码:

           

header("Content-Type:text/html;charset=utf-8");
//-------------------------观察者模式-----------------------
require_once "./Observe/Observe.php";
//前台
$_s = new ConcreteSubject();

//宝银
$baoyin = new ConcreteObserver($_s, "张三");
$jiangchao = new ConcreteObserver($_s,"李四");

//前台记下宝银姜超
$_s->Attach($baoyin);
$_s->Attach($jiangchao);

//前台发现老板回来
$_s->subject_state = "孙总回来了";

//前台发送通知
$_s->Notify();


         优点:

1、一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。

2一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。

3、一个对象必须通知其他对象,而并不知道这些对象是谁。需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。


欢迎关注我的视频课程,地址如下,谢谢。


   PHP面向对象设计模式

目录
相关文章
|
8天前
|
设计模式 存储 算法
PHP中常用的设计模式
设计模式是软件设计中解决问题的常见模式,它们提供了良好的实践,但使用时需注意其可能带来的耦合和测试难度问题。例如,单例模式可能导致全局状态,降低可测试性,而依赖注入可以作为更好的替代方案。
15 4
PHP中常用的设计模式
|
9天前
|
设计模式 监控 中间件
PHP中的中间件模式及其应用
【6月更文挑战第24天】在PHP开发中,中间件是一种设计模式,它允许开发者在请求处理流程的不同阶段插入自定义的处理逻辑。本文将介绍PHP中间件的概念、实现方式以及如何利用中间件提高代码的可维护性和扩展性。通过实际案例,我们将探索中间件在身份验证、日志记录和性能监控等方面的应用,并讨论如何在Laravel框架中有效使用中间件。
|
8天前
|
设计模式 数据库连接 PHP
PHP中的面向对象编程与设计模式应用
传统的PHP编程模式在面向对象的趋势下逐渐演进,本文探讨了面向对象编程在PHP中的应用,并深入分析了常用的设计模式如何优化代码结构和可维护性。
|
9天前
|
设计模式 中间件 API
PHP中的中间件模式及其应用
【6月更文挑战第24天】在现代Web开发中,设计模式的应用是提高代码可维护性和扩展性的关键。本文将深入探讨PHP中中间件模式的概念、实现方式以及在实际项目中的应用案例,旨在为开发者提供一种灵活处理HTTP请求和响应的有效手段。
|
16天前
|
缓存 中间件 PHP
深入理解PHP中的中间件模式
【6月更文挑战第17天】 在Web开发中,中间件模式是处理请求和响应的一个强大工具。本文将深入探讨PHP语言中如何实现中间件模式,以及它如何优化我们的应用程序流程。我们不仅会讨论其概念和工作原理,还会通过实际代码示例来展示如何在Laravel框架中应用中间件,并解释这样做的好处。最后,我们将探索一些高级用法和最佳实践,帮助你更有效地使用中间件模式。
16 3
|
2天前
|
设计模式 PHP
PHP中如何实现观察者模式?
【7月更文挑战第2天】PHP中如何实现观察者模式?
4 0
|
4天前
|
设计模式 算法 PHP
经验大分享:php常见五种设计模式
经验大分享:php常见五种设计模式
|
4天前
|
设计模式 算法 PHP
经验大分享:php常见五种设计模式
经验大分享:php常见五种设计模式
|
5天前
|
设计模式 缓存 前端开发
现代PHP开发中的设计模式应用与性能优化
本篇文章深入探讨了PHP开发中设计模式的实际应用及其对性能的影响。通过分析具体案例和最新研究成果,文章揭示了合理运用设计模式不仅可以提升代码的可维护性和扩展性,还能在特定场景下优化性能。我们将一起探索如何通过科学方法将设计模式融入日常开发实践,同时保持代码的高效执行。
|
8天前
|
设计模式 存储 Java
Java设计模式之观察者模式详解
Java设计模式之观察者模式详解