简单工厂模式

一、概念编程

简单工厂模式属于建立型模式,但不属于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;
    }
}
复制代码
相关文章
相关标签/搜索