狂神設計模式筆記-工廠模式


核心本質:

  • 實例化對象不使用new,用工廠方法代替

  • 將選擇實現類,創建對象統一管理和控制。從而將調用者跟我們的實現類解耦

詳細分類:

  • 簡單工廠模式:用來生產同一等級結構中的任意產品(對於增加新的產品,需要修改已有代碼)
  • 工廠方法模式:用來生產同一等級結構中的固定產品(支持增加任意產品)
  • 抽象工廠模式:圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。

滿足OOP七大原則中的三個:

  • 開閉原則: 一個軟件的實體應當對擴展開放,對修改關閉
  • 依賴倒轉原則: 要針對接口編程,不要針對實現編程
  • 迪米特法則: 只與你直接的朋友通信,而避免和陌生人通信

一、簡單工廠模式

舉一個客戶買車的示例(客戶自己不去new車(不用關心車怎么實現的細節),而是通過工廠生產車,減少硬編碼):

public interface Car{
    void name();
}
public class Bench implements Car{
    @Override
    public void name() {
       System.out.println("奔馳車");
    }
}
public class Baoma implements Car{
    @Override
    public void name() {
        System.out.println("寶馬車");
    }  
}
//靜態(簡單)工廠模式
public class CarFactory {
    public static Car getCar(String car){
        if(car.equals("奔馳"))
            return new Bench();
        else if(car.equals("寶馬"))
            return new Baoma();
        else
            return null;
    }
}
public class Customer {
    public static void main(String[] args) {
        Car car = CarFactory.getCar("奔馳");
        car.name();
    }
}

:大多數情況下用的都是簡單工廠模式,這種模式仍有不足,如果再增加一輛車,則會修改CarFactory.java的getCar方法,違反了開閉原則,我們應該擴展,不應該修改。

二、工廠方法模型

我們新建一個CarFactory的接口,然后為每種Car都建一個Factory類。這樣就可以使得每次新加入一種車時,只為這種車建立一個對應的工廠就行,不會影響到原來的代碼。

public interface CarFactory {
    Car getCar();
}
public class BenchFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new Bench();
    }
}
public class Customer {
    public static void main(String[] args) {
        Car car = new BenchFactory().getCar();
        car.name();
    }
}

優點:下次加入一種大眾車,只需要新建一個 DazhongFactory 就行,不會影響到別的工廠。

缺點:代碼量加大,管理復雜,結構復雜,實際業務一般使用簡單工廠模式

總結:不一定要符合設計原則,要根據實際情況加以分析取舍

,只需要新建一個 DazhongFactory 就行,不會影響到別的工廠。

缺點:代碼量加大,管理復雜,結構復雜,實際業務一般使用簡單工廠模式

總結:不一定要符合設計原則,要根據實際情況加以分析取舍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM