工廠模式介紹
實現了創建者與調用者分離
詳細分類:
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
面向對象的設計原則
- OCP 開閉原則 :
一個軟件的實體應該對擴展開放,對修改關閉 - DIP 依賴倒轉原則:
要針對接口編程,不要針對實現編程 - Lod:
直接與你的朋友通信,避免與陌生人通信
核心本質
實例化對象,用工廠方法代替new操作
將選擇實現類、創建對象統一管理和控制,從而將調用者跟我們的實現類解耦。
普通創建實現類
定義接口
public interface Car {
void run();
}
實現類
public class Byd implements Car {
@Override
public void run() {
System.out.println("比亞迪在跑");
}
}
實現類
public class Audi implements Car {
@Override
public void run() {
System.out.println("奧迪在跑");
}
}
沒有工廠模式的情況下,創建實現類
/**
* 沒有工廠模式得情況下
*/
public class Client1 {
public static void main(String[] args) {
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
}
}
可以看到,調用者需要知道接口,和所有用到的實現類
工廠模式創建類
簡單工廠模式示例
public class CarFactory {
public static Car createCar(String type){
if ("奧迪".equals(type)){
return new Audi();
}else if ("比亞迪".equals(type)){
return new Byd();
}else {
return null;
}
}
}
public class CarFactory2 {
public static Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}
簡單工廠模式下,調用
/**
* 簡單工廠得情況下
*/
public class Client2 {
public static void main(String[] args) {
Car c1 = CarFactory.createCar("奧迪");
Car c2 = CarFactory.createCar("比亞迪");
c1.run();
c2.run();
}
}
可以看到,現在調用者只需要與Car和CarFactory打交道,實現瞭解耦。
要點
簡單工廠模式也叫靜態工廠模式,就是工廠類一般是使用靜態方法,通過接收的參數不同來返回不同的對象實例
對於新增產品無能爲力,不修改代碼無法擴展