設計模式學習 四 1 簡單工廠 附C 實現

2021-09-20 07:54:31 字數 2522 閱讀 2780

這是乙個典型的情況, 我們需要在執行時來例項化一些具體的類. 在需要修改或者擴充套件的時候我們就需要改這段**. 乙個程式中可能會多次出現類似的**, 這使得維護和更新非常困難而且容易出錯.

通過面向介面的程式設計, 我們可以把自己從各種變化中隔離出來, 因為如果**是面向介面的話, 那麼通過多型機制, 任何實現了該介面的新類都可以直接被使用.

所以別忘了設計原則:對修改關閉.

假設你是個披薩店老闆, 有以下**:

這是訂購披薩的過程.

而你可能需要多種披薩:

這裡就是根據引數來建立不同型別的披薩例項. 然後再進行下一步操作.

但是這樣的事情可能會發生: 新增新型別披薩, 淘汰某些型別的披薩.

對**修修改改. 所以這不是對修改關閉. 上面那部分**需要修修改改, 下面那部分**是固定不變的. 那最好的辦法就是封裝它.

需要把變化的部分封裝起來, 也就是把建立披薩那部分**移動到另外乙個物件裡, 而這個物件將專注於建立披薩. 

針對這種物件, 它有乙個名字, 叫工廠(factory). 工廠會處理物件建立的細節.

這個類只有乙個任務: 為客戶建立披薩.

為什麼不適用靜態(static)方法?

可以使用static方法, 這樣的話你就不需要建立乙個物件然後再呼叫方法了. 但是這麼做也有乙個缺點, 那就是不可以對它繼承了, 也無法改變create方法的行為了.

使用******factory之後:

簡單工廠實際上並不是設計模式, 可以更多的認為是一種程式設計正規化. 但是使用的卻是非常廣泛.

理清一下目前的情況:

c#實現:

namespace

c04factorypattern.bases

void

prepare();

void

bake();

void

cut();

void

box();

}}namespace

c04factorypattern.bases

}namespace

c04factorypattern.bases

public

void

prepare()

is preparing...");

}public

void

bake()

is baking...");

}public

void

cut()

is cutting...");

}public

void

box()

is boxing...");}}

}

namespace

c04factorypattern.models

public

class

clampizza : pizza

public

class

pepperonipizza : pizza

public

class

veggiepizza : pizza

}

namespace

c04factorypattern.******factory

return

pizza;}}

}

namespace

c04factorypattern.******factory

public pizza orderpizza(string

type)

done!!!");

}else

return

pizza;}}

}

測試:

設計模式學習1 簡單工廠模式

定義 簡單工廠模式 factory pattern 又稱為靜態工廠方法 static factory method 模式,它屬於類建立型模式,但不屬於23種 gof設計模式之一,說它是一種程式設計習慣可能更恰當些 在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責...

C 設計模式 1 簡單工廠模式

24個c 設計模式目錄 原始碼位址 乙個水果農場,使用者需要某一種水果時,農場能夠根據使用者所提供的水果名稱返回該水果。在此,水果農場被稱為工廠 factory 而生產出的水果被稱為產品,水果的名稱被稱為引數,工廠可以根據引數的不同返回不同的產品,這就是簡單工廠的動機。簡單工廠模式 定義乙個工廠類,...

設計模式(四) 工廠模式 簡單工廠

概述 簡單工廠其實不是乙個設計模式,反而像一種程式設計習慣。但由於經常被使用,所以人民經常把它放到工廠模式裡面。定義 簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。實現 抽象類 產品 public abstract class product 具體的產品 public class con...