設計模式(2)----簡單工廠模式
- 說明一下:
- 簡單工廠模式不屬於23種GOF設計模式之一,我之所以寫出來,是應為簡單工廠模式是工廠模式的基礎,23種中的工廠方法模式是從中衍生的。
- 簡介:
- 簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
- 簡單工廠UML圖:
- 組成:
- 簡單工廠模式由三部分組成,具體工廠,具體產品,抽象產品。
- 工廠類:簡單工廠的核心,
- 抽象產品:簡單工廠模式所創建的對象的父類或者它們共同擁有的接口
- 具體產品:簡單工廠模式所創建的任何對象都是這個角色的實現類
- 簡單工廠模式由三部分組成,具體工廠,具體產品,抽象產品。
- 模擬場景:
- 一個生產汽車的工廠,現在要根據客戶的需求來生產汽車,用簡單工廠模式來實現
- 實現步驟:
- 創建抽象產品類,定義具體產品的公共接口
package com.lvsling.simplefactory;
/** * 抽象產品角色 * @author Administrator * */ public abstract class Car {
} |
- 創建具體產品類,定義生產的具體產品
package com.lvsling.simplefactory;
/** * 具體產品角色:CarA * @author Administrator * */ public class CarA extends Car{ public CarA() { System.out.println("生產了一輛A型汽車!"); } } |
package com.lvsling.simplefactory;
/** * 具體產品角色:CarB * @author Administrator * */ public class CarB extends Car{ public CarB() { System.out.println("生產了一輛B型汽車!"); } } |
- 創建工廠類,通過創建靜態方法從而根據傳入不同參數創建不同具體產品類的實例
package com.lvsling.simplefactory;
/** * 簡單工廠類 * @author Administrator * */ public class SimpleFactory {
public SimpleFactory() { System.out.println("工廠已創建!"); }
/** * 根據客戶指定的類型carType,生產相應的車型車Car * * @param carType 車類型 * @return 生產好的車 */ public static Car produceCar(String carType) { Car car = null; switch (carType) { case "A": car = new CarA(); break; case "B": car = new CarB(); break; default: break; } return car; } } |
- 創建一個client來調用工廠類的靜態方法,傳入不同的參數創建不同的具體產品類的實例
package com.lvsling.simplefactory;
public class Client { public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory(); // 創建工廠 Car car_A = simpleFactory.produceCar("A"); // 生產A型車 Car car_B = simpleFactory.produceCar("B"); // 生產B型車 } } |
- 控制臺打印結果
工廠已創建! 生產了一輛A型汽車! 生產了一輛B型汽車! |
- 優點:
- 將創建實例的工作與使用實例的工作分開,使用者不必關心類對象如何創建,實現了解耦;
- 把初始化實例時的工作放到工廠裏進行,使代碼更容易維護。 更符合面向對象的原則
- 模式缺點:
- 使用簡單工廠模式將會增加系統中類的個數,在一定程序上增加了系統的復雜度和理解難度。
- 系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於復雜,不利於系統的擴展和維護。所以說從工廠的角度來說簡單工廠模式是不符合"開-閉"原則的。
- 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。
- 適用場景:
- 工廠類負責創建的對象比較少:由於創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜。
- 客戶端只知道傳入工廠類的參數,對於如何創建對象不關心:客戶端既不需要關心創建細節,甚至連類名都不需要記住,只需要知道類型所對應的參數。
- 總結:
- 簡單工廠模式雖然不屬於23種GOF設計模式,但是它是工廠模式的基礎,在了解簡單工廠模式後,才能更深入的學習工廠方法模式。
設計模式(2)----簡單工廠模式