Java設計模式學習-簡單工廠模式
阿新 • • 發佈:2018-12-26
工廠模式
- 實現了建立者和呼叫者的分離 。
- 詳細分類又分為三類
- 1), 簡單工廠模式 -->用來生產同一等級結構中的任意產品。(對於增加新產品 ,需要修改已有的程式碼)
- 2),工廠方法模式 -->用來生產同一等級結構中固定產品 。 (支援增加任意產品)
- 3),抽象工廠模式 -->用來生產不同產品品類的全部產品 。(對於增加新的產品,無能無力 , 支援增加產品族)
核心本質 :
- 例項化物件 ,用工廠方法代替 new 操作 。
- 將選擇實現類 , 建立物件統一管理和控制 。 從而將呼叫者跟我們的實現類解耦 。
所有面向物件的設計原則包括設計模式
- OCP (開閉原則 , Open -Closed Principle ) : 一個軟體的實體應當對擴充套件開放 , 對修改關閉 。
- DIP (依賴倒轉原則 , Dependence Inversion Principle ) :要針對介面程式設計 , 不要針對實現程式設計 。
- LOD (迪米特法則 , Law of Demeter ) :只與你直接的朋友通訊 , 而避免和陌生人通訊 。
接下來實現簡單工廠模式
1), 首先建立我們的Car類介面
/**
*汽車類介面
*/
public interface Car {
void run();
}
2),建立實現類 奧迪類與比亞迪類
/**奧迪類 * @author 曉電腦 */ public class AudiCar implements Car { @Override public void run() { System.out.println("奧迪車再跑"); } } /**比亞迪類 * @author 曉電腦 */ public class BydCar implements Car { @Override public void run() { System.out.println("比亞迪再跑"); } }
3), 如果沒有使用簡單工廠模式 ,我們是這樣建立奧迪類與比亞迪類的
/**
* 沒有工廠模式下建立車
* 相當於呼叫者 呼叫者需要知道Car 還要知道AudiCar類
*/
public class NoFactoryTest {
public static void main(String[] args) {
Car car1 = new AudiCar();
Car car2 = new BydCar();
car1.run();
car2.run();
}
}
這樣呼叫者不僅需要知道Car 這個介面 ,還要知道Car下面有幾個實現 ,這就相當於一個司機,他不需要知道車是怎麼建立的,他只要會開車就行了,接下來我們構建UML圖來看一下
接下來我們用簡單工廠模式來看一下
建立一個工廠類
/**
* 簡單的工廠
* 建立者
* 如果現在增加新的類 如賓士類 我們修改工廠類 違反了開閉原則 所以說簡單工廠模式是有一些小問題
*
*/
public class FactoryCar {
public static Car createCar(String type) {
Car car = null;
switch (type) {
case "奧迪":
car = new AudiCar();
break;
case "比亞迪":
car=new BydCar();
break;
default:
}
return car;
}
}
使用工廠模式我們就可以直接在工廠裡面獲取如下
/**
* 工廠模式下建立車
* 相當於呼叫者
*/
public class FactoryTest01 {
public static void main(String[] args) {
Car car1 = FactoryCar.createCar("奧迪");
Car car2 = FactoryCar.createCar("比亞迪");
car1.run();
car2.run();
}
}
在工廠模式下,我們只要告訴工廠我們需要什麼車,然後工廠就給我們返回那個車,我們不需要知道奧迪車與比亞迪車是如何建立的我們來看下UML類圖
總結:
- 簡單工廠模式又叫靜態工廠模式 , 就是工廠類 一般使用靜態方法 , 通過接受引數的不同來返回不同的例項物件。
- 對於增加新產品無能為力 ! 不修改程式碼的話, 無法進行擴充套件 。