然而這只是乙個簡單的衣服店,但是當這個店鋪增多了,就會出現很多任務廠,但是每乙個地方的審美與風俗都會產生差異。那麼這麼多的衣服店店都擁有著訂衣服的方法,我們讓每乙個服裝店都繼承它。
我們首先來看下這部分**:
這個為服裝店,所有的服裝店都實現它
/**
* 服裝店
* *@author wsylp
* */
public
abstract
class
clothesstore
}
其中doclothes()方法就如乙個工廠:
abstract:工廠方法是抽象的,所以依賴子類來處理物件的建立。
clothes:工廠方法必須返回乙個產品,通常使用到工廠方法的返回值。
doclothes:工廠方法將客戶和實際建立具體產品的**分隔開來。
下面是其他方法的**以及測試**
/**
* 服裝店
* *@author wsylp
* */
public
abstract
class
clothesstore
}public
class
chinastylesummerclothes
extends
clothes
}public
class
chinastylespringclothes
extends
clothes
}public
class
chinaclothesstore
extends
clothesstore else
if (item.equals("spring"))
return
null;
}}public
class
testfactory
}
下面我們來深入了解下工廠方法模式的時刻了:
簡單工廠和工廠方法有什麼差異?
簡單工廠的做法,可以將物件的建立封裝起來,但是簡單工廠不具備方法的彈性,因為簡單工廠不能變更正在建立的產品。
依賴倒置原則:**裡減少對於具體類的依賴。要依賴抽象,不要依賴具體類。不能讓高層元件依賴於低層元件,不管高層與低層,兩者都應該依賴於抽象。clothesstore為高層,不依賴於clothes。
依賴倒置原則指的是和一般oo設計的思考方式完全相反。
抽象工廠模式
由於各個地方的布料以及顏色不一致可能會導致衣服的質量不一樣,我們下需要確保沒份材料都是一樣的。由於每一件衣服都包含著顏色,布料等。我們可以建立一盒工廠來生產原料。這個工廠負責原料家族總的每一種原料。
下面我們定義乙個介面,這個介面負責所有的原料:
public
inte***ce
clothesingredientfactory
public
class
chinaclothesingredientfactory
implements
clothesingredientfactory
public cloth createcloth()
}
我們修改clothes()類
public
abstract
class clothes
public string getname()
public
void
setname(string name)
public string tostring()
}
下面是clothes的子類
public
class
chinastylespringclothes
extends
clothes
void prepare()
}public
class
chinastylesummerclothes
extends
clothes
void prepare()
}
現在我們回到衣服店
public
class
chinaclothesstore
extends
clothesstore else
if (item.equals("spring"))
return clothes;}}
抽象工廠與工廠方法的區別:工廠方法:建立物件使用的方法是繼承,利用工廠方法建立物件,需要擴充套件乙個類,並覆蓋他它的工廠方法。其實,整個工廠方法模式,只不過是通過子類來建立物件。用這種做法,客戶只需要知道他們使用的具體抽象型別就可以了。工廠方法只負責將客戶從具體型別中解耦。
抽象工廠:建立物件時通過物件的組合,提供乙個用來建立乙個產品家族的抽象型別,這個型別的子類定義了產品被產生的方法。要使用這個工廠必須先例項化它,然後將它傳入一些針對抽象型別所寫的**中。可以一群相關的產品集合起來。
如何選擇使用哪個工廠?
抽象工廠:當需要建立產品家族和想讓製造的相關的產品集合起來。
工廠方法:把客戶**從例項化的具體類中解鎖。或者你目前還不知道將來要例項化哪些具體的類。只要進行繼承,並實現工廠方法就ok了。
注:該部落格參考了headfirst設計模式
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...