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