抽象工廠模式為建立一組相關或相互依賴的物件提供乙個介面,而且無需指定它們的具體類。
對比工廠方法模式的定義:為某個物件提供乙個介面,而且無需指定它們的具體類。可以看出抽象工廠模式相當於是對工廠方法模式(的橫向擴充套件,工廠方法只能建立一類介面,而抽象工廠模式可以建立多類介面,當然這些介面遵循一致需求。
工廠方法模式引入工廠等級結構,解決了簡單工廠模式中工廠類職責過重的問題,但由於工廠方法模式中每個工廠只建立一類具體類的物件,這將會導致系統當中的工廠類過多,這勢必會增加系統的開銷。因此可以考慮將一些相關的具體類組成乙個「具體類族」,由同乙個工廠來統一生產,這就是抽象工廠模式的基本思想。
建立乙個食品工廠,可以生產特定水果和蔬菜:
1)建立水果類和蔬菜類,以及它們的具體類;
2)建立抽象食品工廠、食品工廠1和食品工廠2;
3)呼叫方建立具體的食品工廠例項。
// 服務方提供的水果類
public class fruit
public string getname()
}// 乙個具體的水果類
super(name); }}
// 乙個具體的水果類
public class banana extends fruit
}
// 服務方提供的蔬菜類
public class vegetable
public string getname()
}// 乙個具體的蔬菜類
public class cabage extends vegetable
}// 乙個具體的蔬菜類
public class carrot extends vegetable
}
// 抽象工廠
public inte***ce ifoodfactory
// 工廠a
public class foodfactorya implements ifoodfactory
@override
public vegetable getvegetable()
}// 工廠b
public class foodfactoryb implements ifoodfactory
@override
public vegetable getvegetable()
}
// 呼叫方
public class eat
}
簡單工廠、工廠方法、抽象工廠的區別: 設計模式來一發(三)工廠方法模式
為某個物件提供乙個介面,而且無需指定它們的具體類。工廠方法模式,是簡單工廠模式的延伸 簡單工廠模式中,每出現乙個新的產品 或實現 都要修改工廠類,這違背了開閉原則。所以工廠方法通過將建立產品的實現延遲到子類,解決了這個問題。但這帶來了新的問題,就是每出現乙個新的產品,就要增加新的產品類例項,開發成本...
設計模式來一發(五)單例模式
單例模式的設計是為了保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。如果想控制例項數目,節省系統資源的時候,就可以考慮單例模式。1 懶漢式 懶漢式是並不在instance定義處直接例項化,而是在使用時才例項化,這是考慮到資源節約,但一般來說,乙個物件的記憶體資源占用不會太大,但由於這種方式為...
設計模式(四) 抽象工廠模式
前面說了兩種設計模式,簡單工廠模式和工廠模式。簡單工廠模式是定義乙個工廠類,工廠類根據呼叫時傳入的引數選擇建立哪乙個類的例項。工廠模式是為每個類建立乙個工廠,而這些工廠都實現了同乙個工廠,客戶端在呼叫的時候自己選擇某個類對應的工廠去建立某個類的例項。那抽象工廠又是什麼呢?抽象工廠在工廠模式的基礎上引...