JAVA常用設計模式(一、抽象原廠模式)

來源:互聯網
上載者:User

標籤: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常用設計模式(一、抽象原廠模式)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.