工廠方法模式(factory method)
又稱虛擬構造子模式,可以說是簡單工廠的抽象,也可以理解為簡單工廠是退化了的工廠方法模式,其表現在簡單工廠喪失了工廠方法的多型性。我們前一節中提到當產品結構變的複雜的時候,簡單工廠就變的難以應付,如果增加一種產品,核心工廠類必須改動,使得整個工廠的可擴充套件性變得很差,對開閉原則支援不夠。工廠方法模式克服了這些缺點,它定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。一般結構圖如下:
工廠方法模式的對簡單工廠模式進行了抽象。有乙個抽象的factory
類(可以是抽象類和介面),這個類將不在負責具體的產品生產,而是只制定一些規範,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品,這個具體的工廠就負責生產對應的產品。
工廠方法模式有如下角色:
抽象工廠(creator)
角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。
具體工廠(concrete creator)
角色:這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。
抽象產品(product)
角色:工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。
具體產品(concrete product)
角色:這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應。
例項:延續上篇中例子來講~
關係圖:
將上篇中的sendfactory類改動一下即可:
抽象工廠類:
public inte***ce sendfactory
具體工廠類:
public class mailfactory implements sendfactory
}
public class smsfatory implements sendfactory
}
測試類如下:
public class factorytest
}
輸出結果為:
this is mailsender
全部**如下:
抽象產品角色:
public inte***ce sender
具體產品角色:
public class smssender implements sender
}
public class mailsender implements sender
}
抽象工廠角色:
public inte***ce sendfactory
具體工廠角色:
public class smsfatory implements sendfactory
}
public class mailfactory implements sendfactory
}
Java設計模式之工廠方法模式
l 工廠方法模式概述 工廠方法模式中抽象工廠類負責定義建立物件的介面,具體物件的建立工作由繼承抽象工廠的具體類實現。l 優點 客戶端不需要在負責物件的建立,從而明確了各個類的職責,如果有新的物件增加,只需要增加乙個具體的類和具體的工廠類即可,不影響已有的 後期維護容易,增強了系統的擴充套件性 l 缺...
Java設計模式之 工廠方法模式
工廠方法模式分為三種 普通工廠模式 多個工廠方法模式 靜態工廠方法模式。1 普通工廠模式 以發郵件和簡訊的例子說明。結構如下圖所示 主要分為四個步驟 建立各例項的共同介面 建立各功能例項 建立工廠 主程式。請看如下示例 public class factorymethodmodel 建立二者的共同介...
java設計模式之工廠方法模式
工廠方法模式分為三種 1 普通工廠模式 2 多個工廠模式 3 靜態工廠模式 1 定義乙個介面類 package com.dairuijie.factory 動物介面 author drjyy public inte ce anaimal 2 定義實現介面的類 package com.dairuiji...