C 簡述何為工廠模式

2021-10-05 15:19:10 字數 2286 閱讀 4717

學習設計模式-工廠模式,解決了簡單工廠模式的缺點。

定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。

我們還那萬達商場做例子,簡單工廠模式中,我們把店家當作是我們的選擇之一,我們在換一種角度思考。

萬達商場中一開始店家沒有入駐的時候,時空的,但是它預留了很多店家的位置,需要別人進行入駐操作。

這個狀態,我們可以理解成工廠模式的一種實現。這

裡萬達提供的店家門面,相當於我們程式中的乙個個介面資訊,只不過這些介面是沒有實現的。

具體要實現那些,我們要看那些店家入駐。

/// 

/// 萬達抽象類

///

public

abstract

class

wanda

///

/// 購買食物

///

public

class

buyfood

:wanda

}///

/// 購買衣服

///

public

class

buyclothes

:wanda

}///

/// 抽象工廠類 -工廠模式實現的重要類

///

public

abstract

class

creator

///

/// 購買食物-工廠類

///

public

class

buyfoodfactory

:creator

}///

/// 購買衣服-工廠類

///

public

class

buyclothesfactory

:creator

}///

/// 客戶進入萬達商場了

///

static

void

main

(string

args)

使用工廠方法實現的系統,如果系統需要新增新產品時,我們可以利用多型性來完成系統的擴充套件,對於抽象工廠類和具體工廠中的**都不需要做任何改動。

例如:增加乙個購買家具的店家,實現購買

而不用像簡單工廠模式中那樣去修改工廠類中的實現(具體指新增case語句)。具體**為:

/// 

/// 購買家具

///

public

class

buyfurniture

:wanda

}///

/// 購買家具工廠類,負責實現售賣家具的效果

///

public

class

buyfurniturefactory

:creator

}///

/// 客戶進入萬達商場了

///

static

void

main

(string

args)

優點:

工廠方法模式是為了克服簡單工廠模式的缺點(主要是為了滿足ocp)而設計出來的。

簡單工廠模式的工廠類隨著產品類的增加需要增加很多方法(或**),而工廠方法模式每個具體工廠類只完成單一任務,**簡潔。

工廠方法模式完全滿足ocp,即它有非常良好的擴充套件性

1、乙個呼叫者想建立乙個物件,只要知道其名稱就可以了。

2、擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以。

3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

缺點:每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,

使得系統中類的個數成倍增加,

在一定程度上增加了系統的複雜度,

同時也增加了系統具體類的依賴。

應用場景:

1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。

2、資料庫訪問,當使用者不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。

等。。。

常用於資料庫調整,畢竟資料庫種類會比較多每家公司選擇的又都不一樣,所以需要了解一下

工廠模式算是我們專案中常用的一種模式了,主要的應用場景也是資料庫訪問的地方,可以達到一種動態切換資料庫訪問的效果。實際應用頻率還是比較高的,就算不切換,也會預留,方便後期擴充套件(手動機智)

文章參考:

c#設計模式(3)——工廠方法模式

工廠模式

C 簡述何為單例模式

設計模式一直是,我們經常說到的 但是用到的可能並不多,有時候用到後不知道這是個啥模式 手動笑哭 所以寫部落格記錄一下 方便以後 溫故而知新 單例模式指的是確保某乙個類只有乙個例項,並提供乙個全域性訪問點。這個是最終比較完善的類的宣告方法 方法由來可以參考單例模式詳解 單例模式的實現 public s...

簡述設計模式(二) 工廠方法和抽象工廠模式

簡單工廠模式是由乙個工廠物件決定建立哪一種產品類的例項。使用工廠類封裝了建立產品類例項物件的行為,使用者只需告訴工廠類獲取哪個例項,工廠類建立並返回使用者所需的例項。產品介面 public inte ce fruit 產品1 public class implements fruit 產品2 pub...

工廠模式 (C )

1 uml設計圖 2 核心實現 public static insurancefactorygetinsurancefactory string type else if type.equals 汽車損壞 else if type.equals 財產安全 else if type.equals 人員...