定個小目標:一天一種設計模式 ------ 工廠模式(factory pattern)
工廠模式是設計模式中最常用的。主要是在建立物件的外面封裝了一層。將具體過程(new 關鍵字和具體的構造器(初始化過程))隱藏起來。用乙個工廠方法代替,暴露給使用者。
工廠模式的結構是:用乙個方法來代替new關鍵字和構造器。
優點:1、隱藏new 關鍵字和構造器
2、降低了這個物件與別的類之間的耦合度,提高了程式的可擴充套件性。 原因:當子類被別的類替代,或者構造器的引數發生變化的時候,只需改動工廠方法內的new即可,改動量降到了最低,而如果不用工廠模式,而是直接用new關鍵字的話,需要改動的地方就很多了 。
3、把物件的設計模式和實現分隔開,提供**的可擴充套件性,靈活性高。
具體實現根據複雜程度,可以細化為簡單工廠模式,工廠模式,抽象工廠模式。
專門定義乙個類用來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪一類產品類(這些產品類繼承自乙個父類或介面)的例項。(不屬於23種gof設計模式)
//形狀介面類
public inte***ce shape
//形狀實體類
public class rectangle implements shape
}public class square implements shape
}//工廠類
public class shapefactory
if(shapetype.equalsignorecase("circle")) else if(shapetype.equalsignorecase("rectangle"))
return null;
}}shapefactory shapefactory = new shapefactory();
//獲取 circle 的物件,並呼叫它的 draw 方法
shape shape1 = shapefactory.getshape("circle");
//呼叫 circle 的 draw 方法
shape1.draw();
工廠模式中根據建立物件的複雜程度,可以分為工廠方法(factory method)和 抽象工廠(abstract factory).
①工廠方法模式。
定義乙個用於建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。
②抽象工廠模式
抽象工廠模式(abstract factory pattern)是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。換個說法:抽象工廠模式提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定他們具體類。指定具體類的過程,在其子類工廠中實現。
工廠模式和抽象工廠模式的區別和聯絡:
當產品只有乙個的時候,抽象工廠模式即變成了工廠模式。(即只有形狀類工廠或者顏色類工廠)
當產品變為多個時,工廠模式變為抽象工廠模式。(即同時有形狀類工廠和顏色類工廠)
//形狀介面類
public inte***ce shape
//形狀實體類
public class rectangle implements shape
}public class square implements shape
}//顏色介面類
public inte***ce color
//顏色實體類
public class red implements color
}public class green implements color
}//抽象工廠類
public abstract class abstractfactory
//擴充套件抽象工廠類的工廠類,基於給定的資訊生成實體類的物件。
public class shapefactory extends abstractfactory
if(shapetype.equalsignorecase("circle")) else if(shapetype.equalsignorecase("rectangle"))
return null;
}@override
public color getcolor(string color)
}public class colo***ctory extends abstractfactory
@override
public color getcolor(string color)
if(color.equalsignorecase("red")) else if(color.equalsignorecase("green"))
return null;
}}//工廠生成器類
public class factoryproducer else if(choice.equalsignorecase("color"))
return null;
}}//獲取形狀工廠
abstractfactory shapefactory = factoryproducer.getfactory("shape");
//獲取形狀為 circle 的物件
shape shape1 = shapefactory.getshape("circle");
//呼叫 circle 的 draw 方法
shape1.draw();
//獲取顏色工廠
abstractfactory colo***ctory = factoryproducer.getfactory("color");
//獲取顏色為 red 的物件
color color1 = colo***ctory.getcolor("red");
//呼叫 red 的 fill 方法
color1.fill();
1、乙個類使用它的子類來建立物件。eg. nuplayer::public mediaplayerbase
2、在編碼的時候,暫時不好確定使用哪個種類的例項。比如:使用nuplayer ,還是rtkplayer。各有優劣。
3、 不希望建立了那個類的例項以及如何建立例項的資訊暴露給外部程式。
1、基類可以是乙個抽象類,在這種情況下,工廠類必須返回乙個非抽象類。
2、基類提供了一些預設方法,只有當這些預設方法不能滿足特殊需求的情況下才能在子類中重寫這些方法。
3、可以直接通過傳遞給工廠類的引數決定應該返回哪乙個子類的例項。
工廠方法和簡單工廠的區別:工廠方法需要先定義工廠類的介面,然後實現它。而簡單方法直接建立乙個工廠類。
簡單工廠模式和工廠方法和抽象工廠模式的區別,還是雲裡霧裡,不知道總結的對不對。希望有人能解答一下。
簡單工廠模式,工廠模式,抽象工廠模式
三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...
簡單工廠模式 工廠模式 抽象工廠模式
簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...
簡單工廠模式 工廠模式 抽象工廠模式
其實這個三個c 的設計模式已經學習很長時間了,今晚才想起來要寫這三個設計模式,為什麼要用c 中的設計模式呢?for example,你已經會開車了,正著開,倒著開,轉彎,這些都是開車基本的,但是你並沒有很高的車技,並不會炫酷。漂移,就好像c 中的設計模式一樣,在你學好c 的基礎上,嫻熟的應用出的新技...