1. 程式人生 > >物件建立型之AbstractFactory(抽象工廠模式)

物件建立型之AbstractFactory(抽象工廠模式)

額外說下,工廠模式和策略模式的區別

可能有些小夥伴也疑惑, 工廠模式使用的場景之一有:當系統的配置由多個產品中的一個來配置的時候,可以適用工廠模式。 而策略模式 的使用場景一般事,先定義一個演算法族,當程式使用的時候掉用掉用其中的演算法或者業務方法。

區別有以下

1、工廠模式是建立型模式,策略模式是行為型模式。
2、工廠模式是適應物件的變化,而策略是適應行為的變化。
3、工廠模式是具體化物件後,掉用其公開的具體方法。而策略模式是先指定一個具體的類,然後掉用一個抽象方法。
4、工廠模式是重寫父類,而策略模式是掉用不同類的方法。

工廠設計模式

意圖
提供了一個建立一系列相關或者相互依賴的物件介面,而無需指定他們具體的類事什麼。
別名
Kit
動機
假如有這麼一個場景,一個汽車公司能造  a、b、c三種類型的車,他們既有相同的部分,比如 發動機相同,也有不同的地方,比如外觀、空間大小等。那麼對於這問題,讓我們設定工序,該怎麼辦? 為了保證風格標準的可移植性,你不應該為一個特定的視感外觀都設定一道工序。
對此,我們可以抽出一個基礎類,將相同工序的地方全部打包在基類完成,特定的的構造部分在子類完成。
適用性
- 一個系統要獨立於它的產品的建立、組合和表示
- 一個系統要由多個產品中的一個來配置
- 一個產品類庫,你只想顯示他的介面二部顯示它的實現。
例子:
通過抽象工場模式,生產三種類型的車。

CarType:車子的型別

package com.create.factory;
public enum CarType {
    //奧迪,寶馬,賓士
    AODI, BAOMA, BENCI
}

Car

package com.create.factory;

public abstract class Car {
    public Car(CarType model) {
        this.model = model;
        arrangeParts();
    }

    private void
arrangeParts() { } protected abstract void construct(); private CarType model = null; public CarType getModel() { return model; } public void setModel(CarType model) { this.model = model; } }

三種車的具體實現

package com.create.factory;

public class BENCICar extends Car{

    public BENCICar() {
        super(CarType.BENCI);
        construct();
    }

    @Override
    protected void construct() {
        System.out.println("一輛   賓士   建造完成。");
    }

}
package com.create.factory;

public class BAOMACar extends Car{

    public BAOMACar() {
        super(CarType.BAOMA);
        construct();
    }

    @Override
    protected void construct() {
        System.out.println("一輛   寶馬   構造完成。");
    }

}
package com.create.factory;

public class AODICar extends Car {

    public AODICar() {
        super(CarType.AODI);
        construct();
    }

    @Override
    protected void construct() {
        System.out.println("一輛   奧迪   構造完成。");
    }

}

工廠

package com.create.factory;

public class CarFactory {
    public static Car buildFactory(CarType model) {
        Car car = null;
        switch (model) {
        case AODI:
            car=new AODICar();
            break;
        case BENCI:
            car=new BENCICar();
            break;
        case BAOMA:
            car=new BAOMACar();
            break;
        default:
            break;
        }
        return car;
    }
}

測試

package com.create.factory;

public class AbstractFactoryTest {
    public static void main(String[] args) {
        System.out.println(CarFactory.buildFactory(CarType.AODI));
        System.out.println(CarFactory.buildFactory(CarType.BENCI));
        System.out.println(CarFactory.buildFactory(CarType.BAOMA));
    }
}

結果:

一輛 奧迪 構造完成。
[email protected]
一輛 賓士 建造完成。
[email protected]
一輛 寶馬 構造完成。
[email protected]

thx,歡迎討論。

相關推薦

物件建立AbstractFactory抽象工廠模式

額外說下,工廠模式和策略模式的區別 可能有些小夥伴也疑惑, 工廠模式使用的場景之一有:當系統的配置由多個產品中的一個來配置的時候,可以適用工廠模式。 而策略模式 的使用場景一般事,先定義一個

Java設計模式抽象工廠模式

一、什麼是抽象工廠模式 抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。抽象工廠模式可以向客戶端提供一個介面,使得客戶端在不必指定產品的具體型別的情況下,能夠建立多個產品族的產品物件。 二、產品族和產品等級結構 三、模式中包含的角色及其職責 1.抽象工廠(C

設計模式總結Abstruct Factory Pattern抽象工廠模式

目錄 建立型設計模式: 結構型設計模式: 行為型設計模式: Abstruct Factory Pattern(抽象工廠模式) 意圖 提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。 適用性 •一個系統要獨立於它的產品的建立、組合和表示時。 •一

C++重寫《大話設計模式》中模式例項三抽象工廠模式

(宣告:如果想看例項詳細解析,請看《大話設計模式》,這裡文章只是為了加深學習設計模式印象而自己用C++程式寫一遍,以及把程式碼共享給大家。僅僅是把C#語言換成C++表述,不對書中的程式和例子是否合適做個

JAVA 23種設計設計模式---工廠模式抽象工廠模式

抽象工廠模式統稱為工廠模式,一搬說工廠模式時都指的是抽象工廠模式。 介紹如下: 案列結構: 程式碼結構: 轎車: package com.zxf.absfactory; //轎車抽象 public interface Sedan {     //啟動轎車

設計模式(c++)筆記AbstractFactory抽象工廠模式

一、簡介:     抽象工廠,提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。對於工廠方法來說,抽象工廠可實現一系列產品的生產,抽象工廠更注重產品的組合。 AbstractFactory 模式典型的結構圖為:  圖 2-1

設計模式工廠模式工廠方法模式、簡單工廠模式抽象工廠模式

工廠模式 工廠模式是最常用的設計模式之一,這種型別的設計模式屬於建立設計模式,它提供了一種建立物件的最佳方式。 優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想要增加多一個產品,只要擴充套件一個工廠類就可以了。 3、隱蔽產品的具體實現,呼叫者只要關係產品的介面。 程

第5天:自定義建構函式,建立物件簡單工廠模式

面向物件 封裝、繼承、多型(抽象性) js是一門基於物件的語言 萬物皆物件 物件:有屬性和方法,具體特指的某個事物 物件:有特徵和行為,具體特指的某一事物 javaScript 中的所有事物都是物件:字串、數值、陣列、函式... 此外,Ja

Note8:C#設計模式工廠方法模式VS 簡單工廠模式 & 抽象工廠模式

工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法

c++ 設計模式9 Abstract Factory 抽象工廠模式

構建 數據庫 strac 無需 div exec oracl dfa tle 5.2 抽象工廠模式 動機:在軟件系統中,經常面臨著“一系列相互依賴的對象”的創建工作;同時,由於需求的變化,往往存在更多系列對象的創建工作。 代碼示例: 實現利用數據庫的業務邏輯,支持多數據

iOS經常使用設計模式——工廠方法簡單工廠模式工廠方法模式抽象工廠模式

csdn bst 設計 cto mod 基類 load 引用 角色 1. 簡單工廠模式 怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式? 簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的

設計模式裝飾者模式工廠方法模式抽象工廠模式

三:裝飾者模式 裝飾者模式動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。 意圖:動態地給一個物件新增一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。 主要解決:一般的,我們為了擴充套件一個類經常使用繼承方式實現,由於繼承為類引入靜態

介面設計模式---工廠設計模式簡單工廠模式工廠方法模式抽象工廠模式代理模式

介面設計模式-------工廠設計模式 工廠設計模式分為簡單設計模式和工廠設計模式。 簡單工廠模式 不想把new 放在主方法 專門定義一個類(第三方)用來建立其他類例項(解耦:抽取出來 ,將客戶端建立物件的操作解耦到外部第三方類),被建立的例項通常具有共同

iOS常用設計模式——工廠方法簡單工廠模式工廠方法模式抽象工廠模式

1. 簡單工廠模式 如何理解簡單工廠,工廠方法, 抽象工廠三種設計模式? 簡單工廠的生活場景,賣早點的小攤販,他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠,它生產包子,饅頭,地溝油烙的煎餅。該場景對應的UML圖如下所示: 圖1:簡單工廠模式UML圖 簡單

工廠模式工廠方法模式抽象工廠模式 Java

工廠模式分為3類: * 簡單工廠模式 Simple Factory * 工廠方法模式 Factory Method * 抽象工廠模式 Abstract Factory thinking in Java 中工廠方法模式的例子: interface Ser

android面向介面程式設計抽象工廠模式,擴充套件性超強,Demo優化

本分開始之前。咱先提出來幾個疑問: 介面有什麼用途? 面向介面程式設計的好處? 它和抽象類有什麼區別? 能不能用抽象類代替介面呢? 它和麵向物件程式設計是什麼關係? 本分主要分為: 1.面向介面程式設計和麵向物件程式設計是什麼關係? 2.介面

設計模式系列三:抽象工廠模式

前言 在設計模式有三個模式是與工廠模式相關的,分別是:簡單工廠模式、工廠方法模式以及抽象工廠模式。在前面的文章中已經談到前面兩種,這裡就對抽象工廠模式介紹一下。抽象工廠模式就是提供一個建立一系列相關或者相互依賴的介面(也就是抽象類),而無需指定具體的類。簡單來

Android設計模式模板抽象類abstract

知識點補充:介面和抽象類區別 (1)介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的; 抽象類是可以有私有方法或私有變數的 (2)實現介面的一定要實現接口裡定義的所有方法; 實現抽象類可以有選擇地重寫需要用到的方法

設計模式三:抽象工廠模式

     抽象工廠模式(Abstract Factory Pattern):      定義:Provide an interface for creating families of related or dependent objects without specify

設計模式四:抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每