工廠設計模式

工廠模式目的

工廠模式主要是爲創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

分類

簡單工廠模式

工廠方法模式

抽象工廠模式

簡單工廠模式

又稱靜態工廠方法模式。目的:定義一個用於創建對象的接口。
這裏寫圖片描述

產品類
abstract class BMW {
    public BMW(){

    }
}
public class BMW320 extends BMW {
    public BMW320() {
        System.out.println("製造-->BMW320");
    }
}
public class BMW523 extends BMW{
    public BMW523(){
        System.out.println("製造-->BMW523");
    }
}
工廠類
public class Factory {
    public BMW createBMW(int type) {
        switch (type) {
        case 320:
            return new BMW320();
        case 523:
            return new BMW523();
        default:
            break;
        }
        return null;
    }
}
客戶類
public class Customer {
    public static void main(String[] args) {
        Factory factory = new Factory();
        BMW bmw320 = factory.createBMW(320);
        BMW bmw523 = factory.createBMW(523);
    }
}
總結:

1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯,用來創建產品
2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。
3) 具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。

工廠方法模式

改進

因爲每增加一種新型車,都要在工廠類中增加相應的創建業務邏輯(createBMW(int type)方法需要新增case),這顯然是違背開閉原則(對擴展開放;對修改封閉)的。

工廠方法模式組成:

1)抽象工廠角色: 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。
2)具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
3)抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。
4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。

產品類
abstract class BMW {
    public BMW(){

    }
}
public class BMW320 extends BMW {
    public BMW320() {
        System.out.println("製造-->BMW320");
    }
}
public class BMW523 extends BMW{
    public BMW523(){
        System.out.println("製造-->BMW523");
    }
}
創建工廠類
interface FactoryBMW {
    BMW createBMW();
}

public class FactoryBMW320 implements FactoryBMW{

    @Override
    public BMW320 createBMW() {

        return new BMW320();
    }

}
public class FactoryBMW523 implements FactoryBMW {
    @Override
    public BMW523 createBMW() {

        return new BMW523();
    }
}
客戶類:
public class Customer {
    public static void main(String[] args) {
        FactoryBMW320 factoryBMW320 = new FactoryBMW320();
        BMW320 bmw320 = factoryBMW320.createBMW();

        FactoryBMW523 factoryBMW523 = new FactoryBMW523();
        BMW523 bmw523 = factoryBMW523.createBMW();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章