工厂方法模式

介绍

工厂方法模式定义了一个用于创建对象的接口,由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

在工厂方法模式中,创建对象的工作由具体的工厂类来完成,客户端只需要知道所需产品的具体工厂,而无需关心创建细节。

示例

下面是一个简单的工厂方法模式的示例代码:

// 抽象产品类
interface Product {
    void use();
}

// 具体产品类 A
class ProductA implements Product {
    public void use() {
        System.out.println("Product A is used.");
    }
}

// 具体产品类 B
class ProductB implements Product {
    public void use() {
        System.out.println("Product B is used.");
    }
}

// 抽象工厂类
interface Factory {
    Product createProduct();
}

// 具体工厂类 A
class FactoryA implements Factory {
    public Product createProduct() {
        return new ProductA();
    }
}

// 具体工厂类 B
class FactoryB implements Factory {
    public Product createProduct() {
        return new ProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new FactoryA();
        Product productA = factoryA.createProduct();
        productA.use();

        Factory factoryB = new FactoryB();
        Product productB = factoryB.createProduct();
        productB.use();
    }
}

在上面的代码中,Product是抽象产品类,它定义了产品对象的通用接口。ProductAProductB是具体的产品类,它们实现了Product接口。

Factory是抽象工厂类,它定义了创建产品的接口。FactoryAFactoryB是具体的工厂类,它们实现了Factory接口,并提供了创建产品的方法。

在客户端代码中,我们首先创建了两个工厂对象factoryAfactoryB,然后分别调用它们的createProduct()方法来创建对应的产品对象。最后,我们调用产品对象的use()方法来使用产品。

工厂方法模式使得客户端代码不必关心产品对象的创建细节,只需要知道所需产品的具体工厂即可。和简单工厂模式相比,工厂方法模式可以更方便地扩展新产品,比如,如果我们需要添加一个新的产品类ProductC,只需要创建一个新的工厂类FactoryC,并实现createProduct()方法即可,而不需要修改原有工厂类。

工厂方法模式很好地体现了“对扩展开放,对修改关闭”的设计原则。

应用

参考:ChatGPT

posted @ 2024-12-07 15:38  Higurashi-kagome  阅读(33)  评论(0)    收藏  举报