简单工厂模式

介绍

  1. 简单工厂模式(又称静态工厂模式):定义一个创建对象的类,由这个类来封装实例化对象的行为。

  2. 简单工厂模式应用场景:当我们需要根据传入的参数来动态创建对象时,可以使用简单工厂模式。

  3. 简单工厂模式的角色:

    • 工厂类(Creator):负责创建产品的类。在简单工厂模式中,工厂类提供了一个静态方法,根据传入的参数来创建不同的产品对象。

    • 产品类(Product):由工厂类创建的对象。

  4. 示例代码:

    // 产品接口
    interface Product {
        void display();
    }
    
    // 具体产品 A
    class ConcreteProductA implements Product {
        @Override
        public void display() {
            System.out.println("This is product A.");
        }
    }
    
    // 具体产品 B
    class ConcreteProductB implements Product {
        @Override
        public void display() {
            System.out.println("This is product B.");
        }
    }
    
    // 简单工厂类
    class SimpleFactory {
        // 根据类型创建具体产品对象
        public static Product createProduct(String type) {
            switch (type) {
                case "A":
                    return new ConcreteProductA();
                case "B":
                    return new ConcreteProductB();
                default:
                    throw new IllegalArgumentException("Unsupported product type.");
            }
        }
    }
    
    // 客户端代码
    public class Main {
        public static void main(String[] args) {
            // 使用简单工厂创建产品
            Product productA = SimpleFactory.createProduct("A");
            Product productB = SimpleFactory.createProduct("B");
    
            // 调用产品方法
            productA.display(); // Output: This is product A.
            productB.display(); // Output: This is product B.
        }
    }
    

    在上面的代码中,我们定义了一个SimpleFactory工厂类,它提供了一个静态方法createProduct(),根据传入的参数来创建不同的产品对象。我们还定义了两个产品类ConcreteProductAConcreteProductB,它们都实现了display()方法。最后,我们使用工厂类创建了两个产品对象productAproductB,并调用了它们的display()方法。

说明

简单工厂模式并不是一无是处。如果产品的类型是确定的,那么之后就不会需要修改工厂方法。Boolean 的 valueOf() 方法就是一个例子:

public class Boolean {
    public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
    }
}

另外,可考虑用静态工厂方法替代构造方法。

根据《Effective Java》,静态工厂方法可用来代替构造方法,提供更加易用的 API 和更丰富的功能。其相比于构造方法包括但不限于有以下优点:

  1. 静态工厂方法有名称,相比于构造方法,可提供更可读的 API。
  2. 静态工厂方法可以不用每次调用时都创建新的对象,而可以自行实现对象复用。
  3. 静态工厂方法可以返回原返回类型的任何子类型的对象,而不仅仅是产品类的对象。

另:

简单工厂模式不属于 23 中设计模式,它是工厂模式的一种变种。

简单工厂模式违反了开闭原则,如果需要增加对象实例的返回,就必须修改工厂类的代码逻辑。

开闭原则:对修改关闭,对扩展开放。要增加一个新的逻辑,可以新加一个类,但不要在原有类的基础上修改。

主要内容来自:ChatGPT

参考:BeanFactory 和简单工厂模式

posted @ 2024-12-07 15:27  Higurashi-kagome  阅读(2)  评论(0编辑  收藏  举报