一天一个设计模式(17)——观察者模式

观察者模式

定义了对象之间的依赖,一旦其中一个对象的状态发生改变,依赖它的对象都会收到通知。

实例

复制代码
<?php
class Job
{
    public $title;

    public function __construct($title)
    {
        $this->title = $title;
    }
}

class JobSeeker
{
    public $name;

    public function __construct($name)
    {
        $this->name = $name;
    }

    public function onJobPosted(Job $job)
    {
        echo 'Hi ' . $this->name . '!New job posted:' . $job->title.PHP_EOL;
    }
}

class JobPostings
{
    public $jobSeekers = [];

    private function notify(Job $job)
    {
        foreach ($this->jobSeekers as $jobSeeker) {
            $jobSeeker->onJobPosted($job);
        }
    }

    public function attach(JobSeeker $jobSeeker){
        $this->jobSeekers[]=$jobSeeker;
    }

    public function addJob(Job $job){
        $this->notify($job);
    }
}

$john=new JobSeeker('John');
$jack=new JobSeeker('Jack');

$posting=new JobPostings();
$posting->attach($john);
$posting->attach($jack);

$posting->addJob(new Job('teacher'));
观察者模式
复制代码

 

posted @   Bin_x  阅读(226)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示