代碼詳解工廠方法模式和抽象工廠模式
工廠方法模式
定義一個用於創建對象的接口,讓子類決定實例化哪一個類,使一個類的實例化延遲到其子類
類圖
具體代碼
以生產鼠標爲例, 有一個抽象的鼠標工廠,工廠有兩個實現,一個是戴爾鼠標工廠,一個是聯想鼠標工廠,具體的抽象工廠子類,負責決定生產那種鼠標,將類的實例化延遲到了子類
抽象的鼠標工廠類
abstract class MouseFactory{
//抽象方法
abstract Mouse createMouse();
}
抽象工廠的具體實現類,也就是其子類
class DeilMouseFactory extends MouseFactory{
public Mouse createMouse(){
return new DeilMouse();
}
}
class LenovoMouseFactory extends MouseFactory{
public Mouse createMouse(){
return new LenovoMouse();
}
}
鼠標的抽象類,和具體的實現,比如戴爾鼠標,聯想鼠標
abstract class Mouse{
abstract String getName();
}
class DeilMouse extends Mouse{
public String getName(){
return "DeilMouse";
}
}
class LenovoMouse extends Mouse{
public String getName(){
return "LenovoMouse";
}
}
抽象工廠模式
提供一個創建一系列相關或者相互依賴對象的接口,而無需指定他們具體的類
類圖
具體代碼
上面的例子是生產鼠標,現在這個例子是生產PC。有一個抽象的PC工廠,主要兩個抽象方法,一個生產鼠標,一個生產鍵盤。PC工廠的具體實現有戴爾工廠,聯想工廠。各自生產自己類型的鼠標和鍵盤
abstract class PCFactory{
//抽象方法
abstract Mouse createMouse();
abstract KeyBoard createKeyBoard();
}
class DeilPCFactory extends PCFactory{
public Mouse createMouse(){
return new DeilMouse();
}
public KeyBoard createKeyBoard(){
return new DeilKeyBoard();
}
}
class LenovoPCFactory extends PCFactory{
public Mouse createMouse(){
return new LenovoMouse();
}
public KeyBoard createKeyBoard(){
return new LenovoKeyBoard();
}
}
通過閱讀上面的源碼,或許你發現了,如果只有一個產品,抽象工廠模式直接退化爲工廠方法模式。