【设计模型】静态工厂

239 阅读2分钟

静态工厂是一种创建对象的设计模式,它属于创建型设计模式的一种。

在静态工厂模式中,通过一个静态方法来创建对象,而不是使用构造函数直接实例化对象。

这个静态方法通常位于一个单独的类中,该类被称为静态工厂类

静态工厂类负责根据不同的参数和条件来返回相应的对象实例。

静态工厂方法的一些特点和优点包括:

  1. 隐藏对象的创建过程:客户端不需要直接知道对象的创建细节,只需要调用静态方法即可获得所需的对象实例。
  2. 命名灵活:静态工厂方法可以根据需要取任意合适的名字,使代码更易读。
  3. 返回类型的灵活性:静态工厂方法可以返回对象的子类类型,这样可以对对象的创建进行更多的灵活控制。
  4. 重复利用:静态工厂方法可以在需要的时候重复利用已经创建的对象,从而避免频繁创建对象带来的性能开销。
  5. 降低耦合:客户端代码仅依赖于静态工厂类,而不是直接依赖于具体的对象类,从而降低了代码的耦合性。

在使用静态工厂模式时,通常会根据不同的参数来决定创建哪个类的对象,并且方法会返回创建的对象实例。

静态工厂方法并不要求必须每次调用都返回一个新的对象,它可以根据实际情况决定是否复用现有对象。

示例代码(Java):

// 静态工厂类
public class StaticFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ConcreteProductA();
        } else if ("B".equals(type)) {
            return new ConcreteProductB();
        } else {
            throw new IllegalArgumentException("Invalid product type");
        }
    }
}

// 产品接口
interface Product {
    // 产品接口定义的方法
    void doSomething();
}

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

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

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Product productA = StaticFactory.createProduct("A");
        Product productB = StaticFactory.createProduct("B");

        productA.doSomething(); // Output: ConcreteProductA does something.
        productB.doSomething(); // Output: ConcreteProductB does something.
    }
}

在上面的示例中,StaticFactory 是一个静态工厂类,通过其静态方法 createProduct 创建具体产品对象。客户端代码可以通过调用 StaticFactory.createProduct(type) 来获取不同类型的产品对象。