tft每日頭條

 > 生活

 > 十種常用設計模式

十種常用設計模式

生活 更新时间:2024-08-13 12:11:23

首先歡迎大家關注小編哦~~~

觀察者模式

(有時又被稱為發布-訂閱模式)。在此種模式中,一個目标物件管理所有相依于它的觀察者物件,并且在它本身的狀态改變時主動發出通知。這通常呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

十種常用設計模式(設計模式-觀察者模式)1

重要角色:

抽象通知者角色(INotifier):定義了通知的接口規則。

具體通知者角色(Boss):實現抽象通知者的接口,接到狀态改變立即向觀察者下發通知。

抽象觀察者角色(IObserver):定義接到通知後所做的操作(Update)接口規則。

具體觀察者角色(JingDong):實現具體操作方法。

<?php //抽象通知者 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/>"; } }

調用客戶端代碼:

<?php 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對象……,可以使用觀察者模式創建一種鍊式觸發機制。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved