PHP學習手冊 常見的9種設計模式

2021-10-10 19:22:32 字數 2521 閱讀 4027

1、類自動載入

隨著php專案的變大,會導致乙個php檔案的前面有很多的require去包含各種依賴的php檔案。如果某個類刪除,但是在別的檔案裡有匯入的情況,就會導致致命錯誤。解決以上問題的方法,就是__autoload()函式。

php就是用這段**,去動態的載入需要包含的檔案。當使用某個類,而這個類沒有包含到檔案中時,就會呼叫__autoload()函式,去動態的載入這個檔案。但是,當使用多個框架時,每個框架都會有自己的__autoload()實現,所以,會導致檔案重複匯入。

2、單例模式

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

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

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

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

new物件都會消耗記憶體

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

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

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

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

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

3、工廠模式

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

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

4、註冊模式

註冊模式,解決全域性共享和交換物件。已經建立好的物件,掛在到某個全域性可以使用的陣列上,在需要使用的時候,直接從該陣列上獲取即可。將物件註冊到全域性的樹上。任何地方直接去訪問。

5、介面卡模式

將各種截然不同的函式介面封裝成統一的api。 

php中的資料庫操作有mysql,mysqli,pdo三種,可以用介面卡模式統一成一致,使不同的資料庫操作,統一成一樣的api。類似的場景還有cache介面卡,可以將memcache,redis,file,apc等不同的快取函式,統一成一致。 

首先定義乙個介面(有幾個方法,以及相應的引數)。然後,有幾種不同的情況,就寫幾個類實現該介面。將完成相似功能的函式,統一成一致的方法。

6、策略模式

策略模式,將一組特定的行為和演算法封裝成類,以適應某些特定的上下文環境。 

eg:假如有乙個電商**系統,針對男性女性使用者要各自跳轉到不同的商品類目,並且所有的廣告位展示不同的廣告。在傳統的**中,都是在系統中加入各種if else的判斷,硬編碼的方式。如果有一天增加了一種使用者,就需要改寫**。使用策略模式,如果新增加一種使用者型別,只需要增加一種策略就可以。其他所有的地方只需要使用不同的策略就可以。 

首先宣告策略的介面檔案,約定了策略的包含的行為。然後,定義各個具體的策略實現類。

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

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

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

7、觀察者模式

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

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

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

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

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

8、原型模式

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

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

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

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

9、裝飾器模式

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

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

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

網頁設計中最常見的9種設計風格

網頁設計中最常見的9種設計風格 扁平化設計可以說是時下最常用的網頁設計風格了,它弱化了材質 漸變 陰影,去除了冗餘資訊的圖形元素 排版。這種風格設計可以使畫面顯得更加平滑,提公升了 內容資訊的視覺層級,更加方便使用者快速尋找自己需要的內容。同時扁平化的介面能更好實現不同尺寸的轉化。這裡所說的3d風格...

五種常見的 PHP 設計模式

設計模式對於每個人都非常有用 本片博文 自 觀察者模式為您提供了避免元件之間緊密耦合的另一種方法。該模式非常簡單 乙個物件通過新增乙個方法 該方法允許另乙個物件,即 觀察者 註冊自己 使本身變得可觀察。當可觀察的物件更改時,它會將訊息傳送到已註冊的觀察者。這些觀察者使用該資訊執行的操作與可觀察的物件...

9種狀態的設計

現在的ui設計團隊通常先設計元件,多數介面幾乎就是各種元件的結合。這會在使用者的 異常路徑 上留下不容小覷的斷檔。由於我們構建的是整個系統,而非幾個頁面,我們必須投入精力打磨這些常常被忽略的狀態的設計,創造出元件的整個生命週期,來適應每乙個人。我所理解的生命週期是這樣的 乙個元件做任何事情之前是怎樣...