工廠方法--設計模式

夫無尤發表於2020-11-17

情景分析:現實中的工廠大家應該都有概念,它就對應了簡單工廠設計模式,即:一個工廠只有一套特定的生產產品的方法和裝置。

                  而工廠方法模式就是為了解決 ” 當一個工廠要生產新的產品時,不得不更換廠子裡的裝置和生產方法" 的問題。

 

模式動機:考慮這樣一個系統,按鈕工廠類可以返回一個具體的按鈕例項,如圓形按鈕、矩形按鈕、菱形按鈕等。在這個系統中,如果需要增加一種新型別的按鈕,如橢圓形按鈕,那麼除了增加一個新的具體產品類之外,還需要修改工廠類的程式碼,這就使得整個設計在一定程度上違反了“開閉原則”。 現在對該系統進行修改,不再設計一個按鈕工廠類來統一負責所有產品的建立,而是將具體按鈕的建立過程交給專門的工廠子類去完成,我們先定義一個抽象的按鈕工廠類再定義具體的工廠類來生成圓形按鈕、矩形按鈕、菱形按鈕等,它們實現在抽象按鈕工廠類中定義的方法。這種抽象化的結果使這種結構可以在不修改具體工廠類的情況下引進新的產品,如果出現新的按鈕型別,只需要為這種新型別的按鈕建立一個具體的工廠類就可以獲得該新按鈕的例項,這一特點無疑使得工廠方法模式具有超越簡單工廠模式的優越性,更加符合“開閉原則”


模式定義:工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構造器(Virtual Constructor)模式或者多型工廠(Polymorphic Factory)模式,它屬於類建立型模式。

 在工廠方法模式中,工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,這樣做的目的是將產品類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪一個具體產品類。

模式結構:

工廠方法模式包含如下角色:
Product:抽象產品
ConcreteProduct:具體產品
Factory:抽象工廠
ConcreteFactory:具體工廠

模式分析:抽象工廠類程式碼

public abstract class PayMethodFactory
{
    public abstract AbstractPay getPayMethod();
}

                  具體工廠類程式碼

public class CashPayFactory extends PayMethodFactory
{
    public AbstractPay getPayMethod()
    {
        return new CashPay();
    }
} 

                   客戶類程式碼片段

PayMethodFactory factory; //抽象工廠類物件
AbstractPay payMethod;    //抽象產品類物件
factory=new CashPayFactory();    //建立實體工廠類 並賦給抽象工廠物件
payMethod =factory.getPayMethod(); //抽象工廠物件 呼叫 實體工廠生產函式 
payMethod.pay(); 

 

 

 

 

 

相關文章