c mysql介面設計模式 八大設計模式

2021-10-18 18:30:00 字數 3404 閱讀 8785

八大設計模式:

單例模式、工廠模式、註冊模式、介面卡模式、策略模式、觀察者模式、原型模式、裝飾器模式

單例模式解決的是如何在整個專案中建立唯一物件例項的問題,工廠模式解決的是如何不通過new建立例項物件的方法。

單例模式

$_instance必須宣告為靜態的私有變數

建構函式和析構函式必須宣告為私有,防止外部程式new 類從而失去單例模式的意義

getinstance()方法必須設定為公有的,必須呼叫此方法 以返回例項的乙個引用

::操作符只能訪問靜態變數和靜態函式

new物件都會消耗記憶體

使用場景:最常用的地方是資料庫連線。

使用單例模式生成乙個物件後, 該物件可以被其它眾多物件所使用。

私有的__clone()方法防止轉殖物件

單例模式,使某個類的物件僅允許建立乙個。建構函式private修飾,

申明乙個static getinstance方法,在該方法裡建立該物件的例項。如果該例項已經存在,則不建立。比如只需要建立乙個資料庫連線。

工廠模式

工廠模式,工廠方法或者類生成物件,而不是在**中直接new。

使用工廠模式,可以避免當改變某個類的名字或者方法之後,在呼叫這個類的所有的**中都修改它的名字或者引數。

test1.php<?phpclasstest1 static function get($name)function _unset($alias)

function query($sql)

functionclose()

function query($sql)

functionclose()

function query($sql)

functionclose()

functionshowcategory()functionshowcategory()function setstrategy(userstrategy $strategy)$page = newpage();if(isset($_get['male']))else$page->setstrategy($strategy);$page->index();

執行結果圖:

總結:通過以上方式,可以發現,在不同使用者登入時顯示不同的內容,但是解決了在顯示時的硬編碼的問題。如果要增加一種策略,只需要增加一種策略實現類,然後在入口檔案中執行判斷,傳入這個類即可。實現了解耦。

實現依賴倒置和控制反轉 (有待理解)

通過介面的方式,使得類和類之間不直接依賴。在使用該類的時候,才動態的傳入該介面的乙個實現類。如果要替換某個類,只需要提供乙個實現了該介面的實現類,通過修改一行**即可完成替換。

觀察者模式

1:觀察者模式(observer),當乙個物件狀態發生變化時,依賴它的物件全部會收到通知,並自動更新。

2:場景:乙個事件發生後,要執行一連串更新操作。傳統的程式設計方式,就是在事件的**之後直接加入處理的邏輯。當更新的邏輯增多之後,**會變得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件的主體**。

3:觀察者模式實現了低耦合,非侵入式的通知與更新機制。

定義乙個事件觸發抽象類。

eventgenerator.php<?phprequire_once 'loader.php';abstract classeventgeneratorfunctionnotify()class observer1 implementsobserverclass observer2 implementsobserver$event = newevent();$event->addobserver(newobserver1());$event->addobserver(newobserver2());$event->triger();$event->notify();

當某個事件發生後,需要執行的邏輯增多時,可以以松耦合的方式去增刪邏輯。也就是**中的紅色部分,只需要定義乙個實現了觀察者介面的類,實現複雜的邏輯,然後在紅色的部分加上一行**即可。這樣實現了低耦合。

原型模式

原型模式(物件轉殖以避免建立物件時的消耗)

1:與工廠模式類似,都是用來建立物件。

2:與工廠模式的實現不同,原型模式是先建立好乙個原型物件,然後通過clone原型物件來建立新的物件。這樣就免去了類建立時重複的初始化操作。

3:原型模式適用於大物件的建立,建立乙個大物件需要很大的開銷,如果每次new就會消耗很大,原型模式僅需要記憶體拷貝即可。

canvas.php<?phprequire_once 'loader.php';classcanvas$this->data = $data;

}function rect($x1, $y1, $x2, $y2)

functiondraw()echo "

;";index.php<?phprequire 'loader.php';$c = newcanvas();$c->init();/ $canvas1 = newcanvas();//$canvas1->init();

$canvas1 = clone $c;//通過轉殖,可以省去init()方法,這個方法迴圈兩百次

//去產生乙個陣列。當專案中需要產生很多的這樣的物件時,就會new很多的物件,那樣

//是非常消耗效能的。

$canvas1->rect(2, 2, 8, 8);$canvas1->draw();echo "-----------------------------------------

";//$canvas2 = new canvas();

// $canvas2->init();

$canvas2 = clone $c;$canvas2->rect(1, 4, 8, 8);$canvas2->draw();

執行結果:

裝飾器模式

1:裝飾器模式,可以動態的新增修改類的功能

2:乙個類提供了一項功能,如果要在修改並新增額外的功能,傳統的程式設計模式,需要寫乙個子類繼承它,並重寫實現類的方法

3:使用裝飾器模式,僅需要在執行時新增乙個裝飾器物件即可實現,可以實現最大額靈活性。

* 輸出乙個字串

* 裝飾器動態新增功能

* class echotext*/

classechotext

//增加裝飾器

public function adddecorator(decorator $decorator)

//執行裝飾器前置操作 先進先出原則

protected functionbeforeecho()

//執行裝飾器後置操作 先進後出原則

protected functionafterecho()

public functionbefore()

public functionafter()

{echo "

";

設計模式 八大設計原則

1.依賴倒置原則 dip 1 高層模組 穩定 不應該依賴於低層模組 變化 二者都應該依賴於抽象 穩定 2 抽象 穩定 不應該依賴於實現細節 變化 實現細節應該依賴於抽象 穩定 這裡 抽象 指的是抽象基類,實現細節 是指子類,低層模組繼承於抽象類,抽象類為高層模組提供低層模組的介面。2.開放封閉原則 ...

php八大設計模式之工廠模式

簡單點來說,就是用到什麼類,就去例項化對應的類。比如 php 可能連線 mysql,可能連線 sqlserver,也可能是 oracle 資料庫,可以動態的去鏈結。書籍來,看實際 比如我們在 like 目錄下有一些鏈結資料庫的類 like mysql.php class mysql like ora...

php八大設計模式之工廠模式

簡單點來說,就是用到什麼類,就去例項化對應的類。比如 php 可能連線 mysql,可能連線 sqlserver,也可能是 oracle 資料庫,可以動態的去鏈結。書籍來,看實際 比如我們在 like 目錄下有一些鏈結資料庫的類 like mysql.php class mysql like ora...