设计模式 - 浅谈简单工厂模式

简单工厂模式

模式功能说明:一种创建型设计模式,它提供了一种创建对象的方式,而无需暴露对象创建的逻辑细节。简单工厂模式通过一个工厂类来创建对象,客户端只需要提供参数,工厂类根据参数的不同来创建相应的对象。

模式思路与原理

在简单工厂模式中,有三个主要角色:

  1. 产品接口(Product Interface):定义了产品对象的共同接口。
  2. 具体产品类(Concrete Product Class):实现了产品接口,是被创建的对象。
  3. 简单工厂类(Simple Factory Class):负责创建具体产品对象的工厂类。

示例

// 产品接口
interface Product {
    void operation();
}

// 具体产品类A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("Concrete Product A");
    }
}

// 具体产品类B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("Concrete Product B");
    }
}

// 简单工厂类
class SimpleFactory {
    public static Product createProduct(String type) {
        if (type.equals("A")) {
            return new ConcreteProductA();
        } else if (type.equals("B")) {
            return new ConcreteProductB();
        }
        return null;
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.operation();  // 输出:Concrete Product A

        Product productB = SimpleFactory.createProduct("B");
        productB.operation();  // 输出:Concrete Product B
    }
}

存在的问题

违反了开闭原则:如果需要新增一个具体产品类,就需要修改简单工厂类的代码,违反了开闭原则。

解决方法是使用工厂方法模式或抽象工厂模式,将具体产品的创建交给具体的工厂类来处理,而不是集中在一个简单工厂类中。

客户端需要知道具体产品的类型:在客户端代码中,需要显式地传入具体产品的类型参数,这暴露了具体产品的实现细节。

解决方法是使用反射机制来动态创建产品对象,客户端只需要传入产品类的类名或标识符即可。

缺乏错误处理机制:当前的简单工厂实现中,如果传入了一个不存在的产品类型参数,会返回null。这没有提供良好的错误处理机制。

解决方法是抛出一个异常,提示客户端传入了无效的产品类型。

单一工厂类的职责过重:当前的简单工厂类负责创建所有的具体产品对象,这导致工厂类的职责过重,违反了单一职责原则。

解决方法是将不同类型的产品创建逻辑分散到不同的工厂类中,每个工厂类负责创建特定类型的产品。

本文链接:

https://pugqq.com/archives/simple-factory.html
设计模式 - 浅谈简单工厂模式 - I/O
1 评论
    unoazewbnsSogo BrowserWindows 10
    11月26日 回复

    《你不是她》韩国剧高清在线免费观看:https://www.jgz518.com/xingkong/27907.html

# 最近更新

Nginx的proxy_pass指令完全拆解2021-03-21

Nginx配置Jenkins域名访问2021-01-03

设计模式 - 浅谈备忘录模式2020-12-02

设计模式 - 浅谈中介者模式2020-11-23

设计模式 - 浅谈迭代器模式2020-11-02

MySQL5.7 字符集设置2020-10-26

设计模式 - 浅谈状态模式2020-10-23

设计模式 - 浅谈访问者模式2020-10-13

设计模式 - 浅谈观察者模式2020-10-12

设计模式 - 浅谈命令模式2020-09-21