代碼詳解工廠方法模式和抽象工廠模式

代碼詳解工廠方法模式和抽象工廠模式

工廠方法模式

定義一個用於創建對象的接口,讓子類決定實例化哪一個類,使一個類的實例化延遲到其子類

類圖

2. 工廠方法模式(Factory Method Pattern) — Graphic Design Patterns

具體代碼

以生產鼠標爲例, 有一個抽象的鼠標工廠,工廠有兩個實現,一個是戴爾鼠標工廠,一個是聯想鼠標工廠,具體的抽象工廠子類,負責決定生產那種鼠標,將類的實例化延遲到了子類

抽象的鼠標工廠類

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();
    }
}

通過閱讀上面的源碼,或許你發現了,如果只有一個產品,抽象工廠模式直接退化爲工廠方法模式。

參考文章

抽象工廠模式和工廠模式的區別? - 名姓的回答 - 知乎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章