這是乙個典型的情況, 我們需要在執行時來例項化一些具體的類. 在需要修改或者擴充套件的時候我們就需要改這段**. 乙個程式中可能會多次出現類似的**, 這使得維護和更新非常困難而且容易出錯.
通過面向介面的程式設計, 我們可以把自己從各種變化中隔離出來, 因為如果**是面向介面的話, 那麼通過多型機制, 任何實現了該介面的新類都可以直接被使用.
所以別忘了設計原則:對修改關閉.
假設你是個披薩店老闆, 有以下**:
這是訂購披薩的過程.
而你可能需要多種披薩:
這裡就是根據引數來建立不同型別的披薩例項. 然後再進行下一步操作.
但是這樣的事情可能會發生: 新增新型別披薩, 淘汰某些型別的披薩.
對**修修改改. 所以這不是對修改關閉. 上面那部分**需要修修改改, 下面那部分**是固定不變的. 那最好的辦法就是封裝它.
需要把變化的部分封裝起來, 也就是把建立披薩那部分**移動到另外乙個物件裡, 而這個物件將專注於建立披薩.
針對這種物件, 它有乙個名字, 叫工廠(factory). 工廠會處理物件建立的細節.
這個類只有乙個任務: 為客戶建立披薩.
為什麼不適用靜態(static)方法?
可以使用static方法, 這樣的話你就不需要建立乙個物件然後再呼叫方法了. 但是這麼做也有乙個缺點, 那就是不可以對它繼承了, 也無法改變create方法的行為了.
使用******factory之後:
簡單工廠實際上並不是設計模式, 可以更多的認為是一種程式設計正規化. 但是使用的卻是非常廣泛.
理清一下目前的情況:
c#實現:
namespacec04factorypattern.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...");}}
}
namespacec04factorypattern.models
public
class
clampizza : pizza
public
class
pepperonipizza : pizza
public
class
veggiepizza : pizza
}
namespacec04factorypattern.******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...