php設計 PHP常用設計模式

2021-10-22 23:06:59 字數 3769 閱讀 4734

1、單例模式指在整個應用中只有乙個物件例項的設計模式

class single {

public $rand;

static private $instance; // 類直接呼叫

final private function __construct() { // private防止外部new

$this->rand = mt_rand(1, 100);

static public function getinstance() {

if (!self::$instance) { // 判斷$instance是否賦值

self::$instance = new self;

return self::$instance;

$obj1 = single::getinstance();

$obj2 = single::getinstance();

var_dump($obj1 === $obj2); // true

2、工廠模式指通過工廠類呼叫自身靜態方法來生產物件例項的設計模式

//接單例模式**

class factoryclass {

static public function factory() {

return single::getinstance();

var_dump(factoryclass::factory());

3、註冊器模式指將物件註冊到全域性樹上,可直接設定獲取登出物件

class register {

static protected $objects; //全域性樹array

static public function set($alias, $object) {

self::$objects[$alias] = $object; //設定

static public function get($alias) {

return self::$objects[$alias]; //獲取

static public function _unset($alias) {

unset(self::$objects[$alias]); //登出

register::set('rand', factoryclass::factory()); //設定別名為rand的物件

var_dump(register::get('rand')); //獲取別名為rand的物件

register::_unset('rand'); //銷毀別名為rand的物件

var_dump(register::get('rand')); //notice: undefined index: rand

4、介面卡模式指將乙個類的介面轉換成客戶期望的另乙個類的介面,讓原本介面不相容的類合作無間。

介面卡分為類介面卡和物件介面卡,類介面卡採用「多繼承」的實現方式,導致不良的高耦合,物件介面卡採用「物件組合」的方式,更符合松耦合精神。

4.1 類介面卡

//類介面卡使用的是繼承

* 目標

inte***ce target {

public function method1(); //源類也有的方法1

public function method2(); //源類沒有的方法2

* 源class source {

public function method1() {

echo '我是源類含有的方法一

';* 類介面卡

class adapter extends source implements target {

public function method2() {

echo '我是介面卡補充的方法二

';* 客戶端

class client {

static public function main() {

$adapter = new adapter();

$adapter->method1();

$adapter->method2();

client::main();

4.2 物件介面卡

//類介面卡使用的是繼承

* 目標

inte***ce target {

public function method1(); //源類也有的方法1

public function method2(); //源類沒有的方法2

* 源class source {

public function method1() {

echo '我是源類含有的方法一

';* 類介面卡

class adapter implements target {

private $_source;

public function __construct(source $source) {

$this->_source = $source;

public function method1() { //委派呼叫source的method1方法

$this->_source->method1();

public function method2() { //補充source中沒有的method2方法

echo '我是介面卡補充的方法二';

class client {

static public function main() {

$adapter = new adapter(new source);

$adapter->method1();

$adapter->method2();

client::main();

//我是源類含有的方法一

//我是介面卡補充的方法二

5、觀察者模式指當乙個物件的狀態發生改變時,依賴他的物件會全部收到通知,並自動更新。

* 主題介面

inte***ce subject {

public function register(observer $observer); //註冊物件方法

public function notify(); //通知方法

* 觀察者介面

inte***ce observer {

public function update();

* 執行類

class action implements subject {

private $_observers = array();

public function register(observer $observer) {

$this->_observers = $observer; //物件寫入

public function notify() {

foreach ($this->_observers as $observer) { //遍歷物件

$observer->update();

* 觀察者

class man implements observer {

public function update() {

echo 'man觀察者

';class woman implements observer {

public function update() {

echo 'woman觀察者';

$action = new action();

$action->register(new man);

$action->register(new woman);

$action->notify();

PHP常用的設計模式

工廠模式 工廠模式 是一種類,它具有為您建立物件的某些方法。您可以使用工廠類建立物件,而不直接使用new。這樣,如果您想要更改所建立的物件型別,只需更改該工廠即可。使用該工廠的所有 會自動更改。inte ce iuser class user implements iuser public stat...

php設計模式

php設計模式介紹 導言 php設計模式介紹 第一章 程式設計慣用法 php設計模式介紹 第二章 值物件模式 php設計模式介紹 第三章 工廠模式 php設計模式介紹 第四章 單條模式 php設計模式介紹 第五章 註冊模式 php設計模式介紹 第六章 偽物件模式 php設計模式介紹 第七章 策略模式...

PHP 設計模式

1 單例模式 單例模式 對操作頻繁的類只例項化一次,降低消耗 class test 私有化轉殖函式,禁止複製物件例項 private function clone 對外介面 public static function to object return self object public func...