日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php设计模式之单例(多例),注册器,观察者模式

發布時間:2023/12/9 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php设计模式之单例(多例),注册器,观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?單例(Singleton)模式和不常見的多例(Multiton)模式控制著應用程序中類的數量。如模式名稱,單例只能實例化一次,只有一個對象,多例模式可以多次實例化。

? ? ? ?基于Singleton的特性,我們經常用Singleton配置應用程序并定義應用程序中可能隨時訪問的變量。但有時并不推薦使用Singleton,因為它生成了一個全局狀態且

該單一根對象沒有封裝任何系統功能。多數情況下,會使單元測試和調試變得困難。讀者根據情況自行決定。

? 代碼示例:

<?php class SingletonExample{private function __construct(){}//防止直接實例化public static function getInstance(){ //不與任何對象有關聯static $instance=null; //調用此函數的所有代碼共享該變量,不必要讓其是類的靜態變量if($instance==null){$instance=new SingletonExample();}return $instance;} } $obj1=SingletonExample::getInstance(); $obj2=SingletonExample::getInstance(); var_dump($obj1===$obj2);// true 是同一個實例 ?>

Multiton與singleton相似,不同的是后者需要getInstance()函數傳遞關鍵值。

對于給定的關鍵值只會存在唯一的對象實例,如果有多個節點,每個節點擁有唯一的表識符,且各個節點在某單次執行(如cms里的節點)可能出現多次,那么就可以用Multiton模式實現這些節點啊,Multiton節省內存,并確保同一個對象的多個實例不發生沖突.

示例:

1 <?php 2 class MultitonExample{ 3 private function __construct(){}//防止直接實例化 4 5 public static function getInstance($key){ 6 static $instance=array(); 7 if(!array_key_exists($key,$instance)){ 8 $instance[$key]=new MultitonExample(); 9 } 10 return $instance[$key]; 11 } 12 13 }; 14 ?>

注冊器模式

<?php class Register {protected static $objects;function set($alias,$object){self::$objects[$alias]=$object;}function _unset($alias){unset(self::$objects[$alias]);}function get($alias){return self::$objects[$alias];} }

?觀察者模式

觀察者模式:當一個對象狀態發生改變時,依賴它的對象全部會收到通知,并自動更新
場景:當一個事件發生后,要執行一連串更新操作。傳統的編程方式,就是在時間的代碼之后直接加入邏輯處理.
當更新的邏輯增多后,代碼變的難以維護。這種方式使耦合的,侵入式的,增加新的邏輯需要修改事件主體代碼

觀察者模式實現了低耦合,非侵入式的通知與更新機制 <?php interface Observer {function update($event_info=null); } class Observer1 implements Observer{function update($event_info=null){echo "update1<br>";} } class Observer2 implements Observer{function update($event_info=null){echo "update2<br>";} }abstract class EventGenerator{private $observers=[];function addObserver(Observer $observer){$this->observers[]=$observer;}function notify(){foreach($this->observers as $observer){$observer->update();}}} class Event extends EventGenerator{function trigger(){echo "Event <br>";$this->notify();} }$event=new Event(); $event->addObserver(new Observer1()); $event->addObserver(new Observer2());$event->trigger();

?

yii框架里的behavior機制就是基于觀察者模式

?

轉載于:https://www.cnblogs.com/HKUI/p/3140644.html

總結

以上是生活随笔為你收集整理的php设计模式之单例(多例),注册器,观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。