標籤:
.Net 視頻學習第2季 簡單工廠設計模式
設計模式就是解決一類問題的設計方案,有人總結了23種常見的設計模式,簡單工廠是其中一種。
一個簡單的工廠會生產不同的商品,例如筆記本工廠會生產不同品牌的筆記本,而客戶需要哪一款需要通過詢問客戶才能得知。簡單工廠設計模式的核心就是,儘可能屏蔽各個品牌筆記本的差異,消除其帶來的代碼冗餘,
返回一個筆記本的父類,裡面裝的是子類對象,通過抽象類別來實現多態。
例如,筆記本工廠生產4種品牌的筆記本A,B,C,D,如果不用筆記本父類,在main方法中先詢問客戶需要哪一款,再返回對應的對象,代碼就會類似下面的
class Notebook A{}class Notebook B{}class Notebook C{}class Notebook D{}
main()
{
Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");
std::string type = Console.ReadLine();
switch (type)
{
case "A":
NotebookA nb = new NotebookA();
break;
case "B":
NotebookB nb = new NotebookB();
break;
case "C":
NotebookC nb = new NotebookC();
break;
case "D":
NotebookD nb = new NotebookD();
break;
}
}
想象一下,如果接下來還要對這個具體的筆記本進行操作,例如讀取它的指標,價格,生產所需時間之類,由於主方法裡邊是一個具體類型的筆記本類的對象,因此這些操作都得switch/case來做,代碼冗餘很嚴重,例如每個筆記本都有一個display的方法用於展示自己的參數,代碼類似如下。
class Notebook A{display(){...}}class Notebook B{display(){...}}class Notebook C{display(){...}}class Notebook D{display(){...}}
main()
{
Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");
std::string type = Console.ReadLine();
switch (type)
{
case "A":
NotebookA nb = new NotebookA();
nb.display();
break;
case "B":
NotebookB nb = new NotebookB();
nb.display();
break;
case "C":
NotebookC nb = new NotebookC();
nb.display();
break;
case "D":
NotebookD nb = new NotebookD();
nb.display();
break;
}
}
會發現,同樣的一句說話nb.display();寫了4遍。
如果選擇用多態來實現,主方法裡邊就只有筆記本父類的對象(當然實際上它裝的還是某一個子類的對象),而接下來的操作,只需要調用父類的方法即可(當然實際上方法會被子類方法重寫)。需要建立一個筆記本的父類,代碼類似如下
abstract class Notebook
{
public void display();
}
class NotebookA:Notebook{display(){...}}
class NotebookB:Notebook{display(){...}}
class NotebookC:Notebook{display(){...}}
class NotebookD:Notebook{display(){...}}
main()
{
Console.WriteLine("which type of notebook you want to buy: A/B/C/D?");
std::string type = Console.ReadLine();
Notebook nb;
switch (type)
{
case "A":
nb = new NotebookA();
break;
case "B":
nb = new NotebookB();
break;
case "C":
nb = new NotebookC();
break;
case "D":
nb = new NotebookD();
break;
}
nb.display();
}
用簡單工廠設計模式來實現,就可以減少代碼冗餘了。
簡單地說,如果有N個子類,不採用多態,同一個操作,在主方法裡邊要寫N遍(寫N個子類調用方法),用多態,在主方法裡邊只用寫一遍(調用父類方法,該方法被子類重寫)。簡單工廠設計模式的核心就是當不清楚客戶需要什麼子類對象的時候,返回一個父類對象給客戶,裡邊裝的是什麼子類對象取決於訪問客戶的結果。
.Net學習 第2季10 簡單工廠設計模式