设计模式(2):简单工厂模式

133 阅读1分钟

简单工厂模式

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

使用步骤

  1. 定义产品Product接口。
  2. 定义具体产品ConcreteProduct子类继承抽象类,并实现抽象类中的接口。
  3. 定义工厂Factory类,负责创建具体产品。

示例

产品

public interface Product {
    void function();
}

具体产品A、B

public class ProductA implements Product {
    @Override
    public void fucntion() {
        System.out.println("A产品的功能执行了");
    }
}

public class ProductB implements Product {
    @Override
    public void fucntion() {
        System.out.println("B产品的功能执行了");
    }
}

工厂

public class ProductFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ProdctA();
            case "B":
                return new ProductB();
            default:
                throw new RuntimeException("产品不存在");
        }
    }
}

进行调用

public class Client {
    public static void main(String[] args) {
        String type = "A";
        Prodct product = ProductFactory.createProduct(type);
        product.function();
    }
}

如果我们不使用简单工厂模式,而是将所有的代码放在一个类,代码如下:

public class Client {
    private static final String TYPE_A = "A";
    private static final String TYPE_B = "B";

    public static void main(String[] args) {
        String type = "A";
        if (Objects.equals(TYPE_A, type)) {
            // A 产品
            System.out.println("A产品的功能执行了");
        } else if (Objects.equals(TYPE_B, type)) {
            // B 产品
            System.out.println("B产品的功能执行了");
        } else {
            throw new RuntimeException("产品不存在");
        }
    }
}

那么就会使得客户端代码极其庞大摒弃难以维护,如果需要新加产品,那么就必须在client中新加代码,这违反了开闭原则迪米特原则