標籤:ice auth info null over rod 戴爾 ati 類型
抽象原廠模式
抽象原廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。
在抽象原廠模式中,介面是負責建立一個相關對象的工廠,不需要顯式指定它們的類。每個產生的工廠都能按照原廠模式提供對象。
意圖:提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。
主要解決:主要解決介面選擇的問題。
何時使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。
如何解決:在一個產品族裡面,定義多個產品。
關鍵代碼:在一個工廠裡彙總多個同類產品。
應用執行個體:下面例子中滑鼠,鍵盤,耳麥為產品,惠普,戴爾為工廠,抽象原廠模式也就是不僅生產滑鼠,同時生產鍵盤。也就是 PC 廠商是個父類,有生產滑鼠,生產鍵盤兩個介面。戴爾工廠,惠普工廠繼承它,
可以分別生產戴爾滑鼠+戴爾鍵盤,和惠普滑鼠+惠普鍵盤。建立工廠時,由戴爾工廠建立。後續工廠.生產滑鼠()則生產戴爾滑鼠,工廠.生產鍵盤()則生產戴爾鍵盤。
以下是具體實現代碼,首先是代碼結構圖:
import cn.review.day03.abstractfactory.product.Keboy;import cn.review.day03.abstractfactory.product.Mouse;/** * PC廠商工廠抽象類別 * @author dyq * */public abstract class PcFactory { public abstract Mouse createMouse(); public abstract Keboy createKeboy();}
import cn.review.day03.abstractfactory.product.DellKeyboy;import cn.review.day03.abstractfactory.product.DellMouse;import cn.review.day03.abstractfactory.product.Keboy;import cn.review.day03.abstractfactory.product.Mouse;/** * 戴爾生產工廠 * @author dyq * */public class DellFactory extends PcFactory{ @Override public Mouse createMouse() { return new DellMouse(); } @Override public Keboy createKeboy() { return new DellKeyboy(); }}
import cn.review.day03.abstractfactory.product.HpKeboy;import cn.review.day03.abstractfactory.product.HpMouse;import cn.review.day03.abstractfactory.product.Keboy;import cn.review.day03.abstractfactory.product.Mouse;/** * 惠普生產工廠 * @author dyq * */public class HpFactory extends PcFactory{ @Override public Mouse createMouse() { return new HpMouse(); } @Override public Keboy createKeboy() { return new HpKeboy(); }}
/** * 產生工廠器類,通過不同的廠家來擷取不同的生產工廠 * @author dyq * */public class FactoryProducer { public static PcFactory getFactory(String choice){ if(choice.equalsIgnoreCase("DELL")){ return new DellFactory(); } else if(choice.equalsIgnoreCase("HP")){ return new HpFactory(); } return null; }}
/** * 產品之滑鼠介面 * @author dyq * */public interface Mouse { public String sayHi();}
/** * 產品之鍵盤介面 * @author dyq * */public interface Keboy { public String sayHi();}
/** * 戴爾鍵盤生產類 * @author dyq * */public class DellKeyboy implements Keboy{ @Override public String sayHi() { return "生產了戴爾鍵盤"; }}
/** * 戴爾滑鼠生產類 * @author dyq * */public class DellMouse implements Mouse{ @Override public String sayHi() { return "生產了戴爾滑鼠"; }}
/** * * @author dyq * */public class HpKeboy implements Keboy{ @Override public String sayHi() { return "生產了惠普鍵盤"; }}
public class HpMouse implements Mouse{ @Override public String sayHi() { return "生產了惠普滑鼠"; }}
最後是測試類別:
import cn.review.day03.abstractfactory.factory.FactoryProducer;import cn.review.day03.abstractfactory.factory.PcFactory;import cn.review.day03.abstractfactory.product.Mouse;/** * 測試抽象原廠模式 * @author dyq * */public class DesignPatternAbstractFactory { public static void main(String[] args) { PcFactory dellPcFactory = FactoryProducer.getFactory("DELL"); Mouse dellMouse = dellPcFactory.createMouse(); String mouse1 = dellMouse.sayHi(); System.out.println(mouse1); PcFactory hpPcFactory = FactoryProducer.getFactory("HP"); Mouse hpMouse = hpPcFactory.createMouse(); String mouse2 = hpMouse.sayHi(); System.out.println(mouse2); }}
在抽象原廠模式中,假設我們需要增加一個產品
假設我們增加耳麥這個產品,則首先我們需要增加耳麥這個父類,再加上戴爾耳麥,惠普耳麥這兩個子類。
之後在PC廠商這個父類中,增加生產耳麥的介面。最後在戴爾工廠,惠普工廠這兩個類中,分別實現生產戴爾耳麥,惠普耳麥的功能。
JAVA常用設計模式(一、抽象原廠模式)