Java設計模式之抽象工廠模式
阿新 • • 發佈:2021-08-12
針對工廠方法的問題,當有多個產品等級時(食物、飲料、甜品。。。) 工廠類就會很多。抽象工廠模式對該問題進行了優化。
抽象工廠的優點:
- 仍然有工廠模式和簡單工廠模式的優點。
- 抽象工廠把工廠類的數量減少了,無論有多少個產品等級,工廠就一套。
抽象工廠的缺點:
- 當產品等級(食物、飲料)發生變化時(增加產品等級,刪除產品等級),都要引起以前工廠程式碼的修改(動一發牽全域性),違反了ocp原則。
當產品等級比較固定時,可以使用抽象工廠。
package com.fjh.factory.simplefactory.abstractfactory; interface Food{ void eat(); } interface Drink{ void drink(); } class Hamburger implements Food { @Override public void eat() { System.out.println("吃漢堡"); } } class Cola implements Drink{ @Override public void drink() { System.out.println("喝可樂"); } } interface Factory{ Food getFood(); Drink getDrink(); //與工廠方法的最大區別之處(多個產品等級),因此得名抽象工廠。 } class KFCFactory implements Factory { @Override public Food getFood() { return new Hamburger(); } @Override public Drink getDrink() { return new Cola(); } } class Rise implements Food { @Override public void eat() { System.out.println("吃飯"); } } class XueBi implements Drink{ @Override public void drink() { System.out.println("喝雪碧"); } } class MFactory implements Factory { @Override public Food getFood() { return new Rise(); } @Override public Drink getDrink() { return new XueBi(); } } public class AbstractFactory { public static void main(String[] args){ KFCFactory kfcFactory = new KFCFactory(); Food food1 = kfcFactory.getFood(); Drink drink1 = kfcFactory.getDrink(); food1.eat(); drink1.drink(); } }