3 回答

TA貢獻1780條經驗 獲得超1個贊
所有三種工廠類型都做同樣的事情:它們是“智能構造函數”。
假設您希望能夠創建兩種水果:Apple和Orange。
廠
工廠是“固定的”,因為你只有一個沒有子類化的實現。在這種情況下,您將擁有這樣的類:
class FruitFactory { public Apple makeApple() { // Code for creating an Apple here. } public Orange makeOrange() { // Code for creating an orange here. }}
使用案例:構造Apple或Orange有點太復雜,無法在構造函數中處理。
工廠方法
工廠方法通常用于在類中進行一些通用處理,但想要改變實際使用的水果類型。所以:
abstract class FruitPicker { protected abstract Fruit makeFruit(); public void pickFruit() { private final Fruit f = makeFruit(); // The fruit we will work on.. <bla bla bla> }}
...然后,您可以FruitPicker.pickFruit()
通過在子類中實現工廠方法來重用通用功能:
class OrangePicker extends FruitPicker { @Override protected Fruit makeFruit() { return new Orange(); }}
抽象工廠
抽象工廠通常用于依賴注入/策略之類的東西,當你想要能夠創建一整套需要“同類”的對象時,并且有一些共同的基類。這是一個與水果有關的模糊例子。這里的用例是我們要確保我們不會在Apple上意外使用OrangePicker。只要我們從同一家工廠獲得我們的水果和采摘器,他們就會匹配。
interface PlantFactory { Plant makePlant(); Picker makePicker(); }public class AppleFactory implements PlantFactory { Plant makePlant() { return new Apple(); } Picker makePicker() { return new ApplePicker(); }}public class OrangeFactory implements PlantFactory { Plant makePlant() { return new Orange(); } Picker makePicker() { return new OrangePicker(); }}

TA貢獻1856條經驗 獲得超11個贊
這三種模式如何相互不同?
Factory:創建對象而不將實例化邏輯暴露給客戶端。
工廠方法:定義用于創建對象的接口,但讓子類決定實例化哪個類。Factory方法允許類將實例化延遲到子類
抽象工廠:提供用于創建相關或從屬對象族的接口,而無需指定其具體類。
AbstractFactory模式使用組合將創建對象的責任委托給另一個類,而Factory方法設計模式使用繼承并依賴派生類或子類來創建對象
什么時候用哪個?
工廠:客戶只需要一個類,而不關心它正在實現哪個具體實現。
工廠方法:客戶端不知道在運行時需要創建哪些具體類,但只想獲得一個可以完成工作的類。
AbstactFactory:?當您的系統必須創建多個系列的產品或您想要提供產品庫而不暴露實現細節時。
抽象工廠類通常使用Factory Method實現。工廠方法通常在模板方法中調用。
如果可能的話,任何與這些模式相關的java示例?
工廠和工廠方法
意圖:
定義用于創建對象的接口,但讓子類決定實例化哪個類。Factory Method允許類將實例化延遲到子類。
UML圖:
Product:它定義Factory方法創建的對象的接口。
ConcreteProduct:實現產品界面
創建者:聲明工廠方法
ConcreateCreator:?實現Factory方法以返回ConcreteProduct的實例
問題陳述:使用工廠方法創建游戲工廠,工廠方法定義游戲界面。
代碼段:
工廠模式。何時使用工廠方法?
與其他創作模式比較:
設計從使用工廠方法(不太復雜,可定制,子類增加)開始,并逐漸向Abstract Factory,Prototype或Builder發展(更靈活,更復雜),因為設計師發現需要更多靈活性的地方
抽象工廠類通常使用工廠方法實現,但也可以使用Prototype實現
添加回答
舉報