详解设计模式:抽象工厂模式
工廠方法模式,又稱工廠模式、多態工廠模式和虛擬構造器模式,通過工廠父類定義負責創建產品的公共接口,子類負責生產具體對象。可以理解為簡單工程模式的升級,解決簡單工廠模式的弊端。
~
本篇內容包括:關于 工廠方法模式、工廠方法模式 Demo。
文章目錄
- 一、關于 抽象工廠模式
- 1、關于 抽象工廠模式
- 2、簡單工廠、工廠方法、抽象工廠模式對比
- 3、關于 抽象工廠模式構成
- 4、關于 抽象工廠模式的實現
- 5、關于 抽象工廠模式的優缺點
- 二、抽象工廠模式 Demo
- 1、Demo 設計
- 2、Demo 實現
- 3、Demo 測試
一、關于 抽象工廠模式
1、關于 抽象工廠模式
抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。這里的抽象角色就是產品族。
Ps:產品族是具有相同屬性的同類型產品。
抽象工廠,非常適合解決兩個維度的組合產品的構造問題,取其中一個維度作為產品族,另外一個維度作為產品族中具體的多個產品。
2、簡單工廠、工廠方法、抽象工廠模式對比
- 簡單工廠模式:一個工廠生產所有產品。
- 工廠方法模式:每個工廠生產自己負責的具體產品。
- 抽象工廠模式**:**抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產一個等級的產品,而抽象工廠模式可生產多個等級(一個系列)的產品。
3、關于 抽象工廠模式構成
抽象工廠的構成:
-
抽象工廠(Abstract Factory):提供了創建產品的接口,它包含多個創建產品的方法 newProduct(),可以創建多個不同等級的產品。。
-
具體工廠(ConcreteFactory):主要是實現抽象工廠中的抽象方法,完成具體產品的創建。
-
抽象產品(Product):定義了產品的規范,描述了產品的主要特性和功能,抽象工廠模式支持多個抽象產品。
-
具體產品(ConcreteProduct):實現了抽象產品角色所定義的接口,由具體工廠來創建,它同具體工廠之間是多對一關系。
4、關于 抽象工廠模式的實現
首先,根據具體產品進行抽象,將它們的公共的代碼進行抽象和提取后,封裝在一個抽象產品中;
其次,根據抽象產品,將各種不同對象的相關代碼封裝到不同的類中,這些類稱為具體產品類,每一個具體產品都是抽象產品的子類;
然后,提供一個抽象工廠類用于提供創建各種產品族產品的方法,在根據具體產品,實現相應的具體工廠類,實現創建對應產品的方法;
最后,客戶端只需要調用具體工廠類的工廠方法可得到一個相應的具體產品對象。
5、關于 抽象工廠模式的優缺點
優點:
- 當一個產品族中的多個對象被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的對象。
- 保證減少工廠類和具體產品的類添加。
缺點:產品族擴展非常困難,要增加一個系列的某一產品,既要在抽象的 工廠和抽象產品里加代碼,又要在具體的里面加代碼。
二、抽象工廠模式 Demo
1、Demo 設計
我們設計一個圖形工廠,其中圖形有多種顏色(紅色、藍色 …),還有多種形狀(矩形、圓形 …),我們利用工廠實現紅色矩形 和 藍色圓形的生產。
# 角色
Shape(抽象形狀類)、Retangle(矩形類)、Circle(圓形類)
Color(抽象顏色類)、Red(紅色類)、Blue(藍色類)
ShapeFactory(抽象工廠類)、RedRetangleFactory(紅色矩形工廠)、BlueCircleFactory(藍色圓形工廠)
# 實現
Shape 作為形狀產品族的抽象父類、Color 作為顏色產品族的抽象父類,使用 ShapeFactory 抽象工廠類分別實現顏色和形狀的設計,最后由具體工廠實現類返回具體的顏色和形狀實現
2、Demo 實現
# Shape 形狀類
//抽象形狀類 public abstract class Shape {public abstract void sayShape(); }//矩形類 public class Retangle extends Shape {@Overidepublic void sayShape() {System.out.println("Hi, I'm Retangle!");} }//圓形類 public class Circle extends Shape {@Overidepublic void sayShape() {System.out.println("Hi, I'm Circle!");} }# Color 顏色類
//抽象顏色類 public abstract class Color {public abstract void sayColor(); }//紅色類 public class Red extends Color {@Overidepublic void sayColor() {System.out.println("Hi, I'm Red!");} }//白色類 public class Blue extends Color {@Overidepublic void sayColor() {System.out.println("Hi, I'm Blue!");} }# ShapeFactory 工廠類
//抽象工廠類 public abstract class ShapeFactory {public abstract Shape createShape();public abstract Color createColor(); }//紅色的矩 public class RedRetangleFactory extends ShapeFactory {@Overidepublic Shape createShape() {return new Retangle();}@Overidepublic Color createColor() {return new Red();} }//藍色的圓 public class BuleCircleFactory extends ShapeFactory {@Overidepublic Shape createShape() {return new Circle();}@Overidepublic Color createColor() {return new blue();} }3、Demo 測試
public class Client {public static void main(String[] args) {Color color;Shape shape;// 紅色矩形ShapeFactory factory = new RedRetangleFactory();color = factory.createColor();shape = factory.createShape();} }總結
以上是生活随笔為你收集整理的详解设计模式:抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你搭建NOD32升级服务器
- 下一篇: [网鼎杯 2020 朱雀组]phpweb