常用的幾個設計模式

2021-07-15 18:22:40 字數 1870 閱讀 3677

設計模式是一些程式設計方式,用來解決某一類特殊問題的一種最佳實踐,在物件導向程式設計中有著舉足輕重的地位。

設計模式可以分成3個大類:

其中,單例模式限制應用程式,使其只能建立某一特定類型別的乙個單一的例項。由於要求只能生成乙個例項,所以可以把建構函式設定為私有函式,從而禁止他人建立例項。

class singleton;

private function __clone(){};

static function getinstance()

return self::$instance;

}... ...

}

但是,以上的方法只適用於單執行緒環境,在多執行緒環境下就會出現問題:如果兩個執行緒同時執行到判斷instance是否為null的語句時,若此時instance還沒有建立,則此時兩個執行緒都會各自建立乙個例項,這樣就破壞了單例模式的要求(只能建立某一特定類型別的乙個單一的例項)。多執行緒的問題可以通過加同步鎖來解決。

單例模式模式適用於需要而且只能有乙個物件的場景下。如乙個web站點需要乙個資料庫連線物件,並將所有資料庫連線都放在這個物件上;或者需要建立乙個全域性物件的場景下,如乙個web應用程式需要使用同乙個配置物件,這時候可以用單例模式實現乙個config類。

工廠模式和單例模式都是建立型模式,不同的是:單例模式建立和管理乙個單獨的型別的單一物件,而工廠模式則被用於建立多個不同型別的類的多個物件。

簡單工廠模式:客戶端傳乙個條件進工廠類,工廠類根據條件建立相應的產品類物件,並將產品類物件 return 給客戶端使用。

簡單工廠模式的實現一般通過乙個靜態方法,如factory(),這個方法至少要接收乙個引數,用於標識將要建立的物件的型別,並會返回乙個該型別的物件。

static function factory($type)

簡單工廠模式的使用環境:當編寫程式的時候並不能完全確定需要生成的物件的確切型別,只有在程式執行時才能確定的情況下;或者有乙個抽象的基類,它的幾個不同的派生子類需要立即被建立。這些情況下,將物件的建立工作交給類自己去完成。

簡單工廠模式中,工廠類包含了邏輯判斷,使得工廠能夠根據使用者的選擇(type)而例項化相關的類。而工廠模式是簡單工廠模式的進一步抽象,其定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,即讓乙個類的例項化延遲到了子類。

工廠模式的實現是把工廠類抽象出乙個介面,該介面有乙個建立抽象產品的工廠方法。讓客戶來決定例項化哪一類的工廠。

抽象工廠模式是工廠模式的變種,其提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

工廠模式與抽象工廠模式的區別

組合模式將物件組合成樹形結構,表示「部分和整體」的層次結構,即基本物件和組合物件的類層次結構,使得使用者對單個物件和組合物件的使用具有一致性。

組合模式的使用環境:當需求中是體現部分和整體層次的結構時,希望可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時。

**模式為其他物件提供了一種**以控制對這個物件的訪問。

**模式的使用環境:

虛擬**:對乙個開銷很大的物件,應該根據需要來建立。通過虛擬**來存放例項化需要很長時間的真實物件。

安全**:控制真實物件訪問時的許可權。

智慧型**:當呼叫真實的物件的時候,**處理另外的事情。如計算真實物件的引用次數。

將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

應用場景:

介面卡模式與**模式的區別:

策略模式定義了一系列演算法(或者行為)並將其封裝起來,使得演算法(或者行為)之間可以相互替換。

策略模式的實現是把演算法類抽象出乙個介面,該介面有乙個建立演算法的策略方法。讓客戶來決定呼叫哪一類的策略演算法。

策略模式與工廠模式的區別:

Java中幾個常用設計模式

1.單例模式 有的書上說叫單態模式其實都一樣 該模式主要目的是使記憶體中保持1個物件。看下面的例子 package org.sp.singleton 方法一 public class singleton 通過乙個靜態方法向外界提供這個類的例項 public static singleton geti...

Java中幾個常用設計模式

1.單例模式 有的書上說叫單態模式其實都一樣 該模式主要目的是使記憶體中保持1個物件。看下面的例子 package org.sp.singleton 方法一 public class singleton 通過乙個靜態方法向外界提供這個類的例項 public static singleton geti...

Java中幾個常用設計模式

1.單例模式 有的書上說叫單態模式其實都一樣 該模式主要目的是使記憶體中保持1個物件。看下面的例子 package org.sp.singleton 方法一 public class singleton 通過乙個靜態方法向外界提供這個類的例項 public static singleton geti...