簡單工廠模式

一、概念編程

簡單工廠模式屬於建立型模式,但不屬於23種GOF設計模式之一,稱爲靜態工廠方法(Static Factory Method)模式,能夠根據參數的不一樣返回不一樣的類實例。 設計模式

簡單工廠模式

二、模式結構bash

  • Factory(工廠角色):負責實現建立全部實例的內部邏輯。工廠類的建立產品類的方法能夠被外界直接調用,建立所需的產品對象。
  • Product(抽象產品角色):負責描述全部實例所共有的公共接口。
  • ConcreteProduct(具體產品角色):建立目標,全部建立的對象都是充當這個角色的某個具體類的實例。

三、使用場景ide

  • 工廠類負責建立的對象比較少,不會形成工廠方法中的業務太複雜;
  • 客戶只知道傳入工廠類的參數,對於如何建立對象(邏輯)不關心,不須要關係建立細節;
  • 很容易違反高內聚責任分配原則,只在業務很簡單的狀況使用。

四、優缺點ui

優勢:spa

  • 建立和使用分開,無需關心對象如何建立,實現解耦
  • 在工廠初始化具體對象,代碼容易維護,符合面向接口編程原則
  • 引入配置文件,可不修改代碼修改和增長具體類對象,增長靈活性

缺點:設計

  • 工廠類代碼太重,集中了全部具體類對象建立,一旦不能正常工做,整個系統都要受到影響
  • 工廠類違反了高內聚責任分配原則
  • 系統開展困難,添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能形成工廠邏輯過於複雜,不利於系統的擴展和維護
  • 使用了靜態工廠方法,形成工廠角色沒法造成基於繼承的等級結構

五、實例code

建立抽象產品類,定義具體產品的公共接口cdn

public abstract class AbsPhone {
    abstract String getName();

    abstract void setTheme();
}
複製代碼

建立具體產品類(繼承抽象產品類),定義生產的具體產品對象

public class HuaweiPhone extends AbsPhone {

    private String name = "Huawei";


    @Override
    String getName() {
        return name;
    }

    @Override
    void setTheme() {
        // 根據手機設置不一樣主題
    }
}

public class XiaomiPhone extends AbsPhone {

    private String name = "Xiaomi";

    @Override
    String getName() {
        return name;
    }

    @Override
    void setTheme() {
        // 根據手機設置不一樣主題
    }
}
複製代碼

建立工廠類,經過建立靜態方法從而根據傳入不一樣參數建立不一樣具體產品類的實例

public class Factory {
    public static AbsPhone createPhone(String type) throws Exception {
        AbsPhone phone = null;
        switch (type) {
            case "Huawei":
                phone = new HuaweiPhone();
                break;
            case "Xiaomi":
                phone = new HuaweiPhone();
                break;
        }
        if (phone == null) {
            throw new Exception("傳入參數不正確");
        }
        return phone;
    }
}
複製代碼
相關文章
相關標籤/搜索