1. 程式人生 > >Java設計模式學習-簡單工廠模式

Java設計模式學習-簡單工廠模式

工廠模式

  • 實現了建立者和呼叫者的分離 。
  • 詳細分類又分為三類
  • 1), 簡單工廠模式  -->用來生產同一等級結構中的任意產品。(對於增加新產品 ,需要修改已有的程式碼)
  • 2),工廠方法模式   -->用來生產同一等級結構中固定產品 。 (支援增加任意產品)
  • 3),抽象工廠模式   -->用來生產不同產品品類的全部產品 。(對於增加新的產品,無能無力 , 支援增加產品族)

核心本質 :

  • 例項化物件 ,用工廠方法代替 new 操作 。
  • 將選擇實現類 , 建立物件統一管理和控制 。 從而將呼叫者跟我們的實現類解耦 。

 

 

所有面向物件的設計原則包括設計模式

  1. OCP (開閉原則 , Open -Closed Principle ) : 一個軟體的實體應當對擴充套件開放 , 對修改關閉 。
  2. DIP (依賴倒轉原則 , Dependence Inversion Principle ) :要針對介面程式設計 , 不要針對實現程式設計 。
  3. 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類圖

 

                    

 

 

總結: 

  • 簡單工廠模式又叫靜態工廠模式 , 就是工廠類 一般使用靜態方法 , 通過接受引數的不同來返回不同的例項物件。
  • 對於增加新產品無能為力 ! 不修改程式碼的話, 無法進行擴充套件 。