JAVA設計模式 抽象工廠模式

2021-08-18 02:15:36 字數 2966 閱讀 2152

抽象工廠模式(abstact factory pattern) , 也是建立型模式之一 . 之前主要介紹了工廠方法模式 , 抽象工廠模式和工廠方法模式稍有區別 . 工廠方法模式中工廠類生產出來的產品都是具體的 , 也就是說每個工廠都會生產某一種具體的產品 , 但是如果工廠類中所生產出來的產品是多種多樣的 , 工廠方法模式也就不再適用了 , 就要使用抽象工廠模式了 . 

為建立一組相關或相互依賴的物件提供乙個介面 , 而且無須指定它們的具體類

抽象工廠模式是工廠方法模式的公升級版本 , 在有多個業務品種 , 業務分類時 , 通過抽象工廠模式產生需要的物件是一種非常好的解決方式

abstractfactory : 抽象工廠角色 , 它宣告了一組用於建立不同產品的方法 , 每乙個方法對應一種產品

concretefactory : 具體工廠角色 , 它實現了在抽象工廠中定義的建立產品的方法 , 生成一組具體產品 , 這些產品構成乙個產品種類 , 每乙個產品都位於某個產品等級結構中

abstractproduct : 抽象產品角色 , 他定義了幾種產品的基本行為

concreteproduct : 具體產品角色 , 它定義具體工廠生產的具體產品物件 , 實現抽象產品介面中宣告的業務方法

5.1 多個產品族

/** 抽象產品a類 */

public abstract class abstractproducta

//每個產品相同方法,不同實現

public abstract void productmethod2();

}

public class producta1 extends abstractproducta 

}

public class producta2 extends abstractproducta 

}

b產品族與a產品族類似

5.2 抽象工廠介面(可以是介面或抽象類)

package com.xbz.mode.abstrtactfactory.factory;

import com.xbz.mode.abstrtactfactory.product.abstractproducta;

import com.xbz.mode.abstrtactfactory.product.abstractproductb;

public inte***ce ifactory

5.3 具體產品的建立工廠實現類
package com.xbz.mode.abstrtactfactory.factory;

import com.xbz.mode.abstrtactfactory.product.abstractproducta;

import com.xbz.mode.abstrtactfactory.product.abstractproductb;

import com.xbz.mode.abstrtactfactory.product.producta1;

import com.xbz.mode.abstrtactfactory.product.productb1;

//產品等級1的實現類

public class factory1 implements ifactory

//只生產產品等級為1的b產品

public abstractproductb createproductb()

}

package com.xbz.mode.abstrtactfactory.factory;

import com.xbz.mode.abstrtactfactory.product.abstractproducta;

import com.xbz.mode.abstrtactfactory.product.abstractproductb;

import com.xbz.mode.abstrtactfactory.product.producta2;

import com.xbz.mode.abstrtactfactory.product.productb2;

//產品等級2的實現類

public class factory2 implements ifactory

//只生產產品等級為2的b產品

public abstractproductb createproductb()

}

注意:有幾個產品族就有幾個對應的實現工廠類 , 在每個實現工廠中 , 實現不同產品族的生產任務

5.4 測試類

public class abstractfactorydemo 

}

6.1 抽象工廠模式的優點

封裝性 , 每個產品的實現類不是高層模組要關心的 , 它要關心的是介面 , 是抽象 , 它不關心物件是如何建立出來的 , 這都由工廠類負責的 , 只要知道工廠類是誰 , 我就能建立乙個需要的物件 , 省時省力

產品族內的約束為非公開狀態

6.2 抽象工廠模式的缺點

抽象工廠模式的最大缺點就是產品族擴充套件非常困難 , 以demo**為例 , 如果要增加乙個產品c , 也就是說產品家族由原來的2個增加到3個,需要變動很多地方 . 

介面abstractfactory要增加乙個方法createproductc() , 然後兩個實現類都要修改 , 這嚴重違反了開閉原則 . 

6.3 抽象工廠模式和工廠方法模式的對比

抽象工廠模式

工廠方法模式

針對的是面向多個產品等級結構

針對的是乙個產品等級結構

多個抽象產品類

乙個抽象產品類

每個抽象產品類可以派生出多個具體產品類

可以派生出多個具體產品類

乙個抽象工廠類,可以派生出多個具體工廠類

乙個抽象工廠類,可以派生出多個具體工廠類

每個具體工廠類可以建立多個具體產品類的例項

每個具體工廠類只能建立乙個具體產品類的例項

java設計模式 抽象工廠模式

1.概念 設計模式 一書中對於抽象工廠模式是這樣定義的 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。產品 plant介面 public inte ce plant 標誌介面 具體產品planta,plantb public class planta implements pl...

JAVA設計模式 抽象工廠模式

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

Java設計模式 抽象工廠模式

抽象工廠模式可以向客戶端提供乙個介面,使得客戶端在不必指定產品具體型別的情況下,建立多個產品族中的產品物件。這就是抽象工廠模式的用意。每個模式都是針對一定問題的解決方案。抽象工廠模式面對的問題是多產品等級結構的系統設計。在學習抽象工廠具體例項之前,應該明白兩個重要的概念 產品族和產品等級。產品族 是...