什么是工厂方法模式,工厂方法模式解决了什么问题?

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的实例化过程延迟到子类中。这样,客户端代码在不同的子类中实例化具体对象,而不是直接实例化具体类。工厂方法模式允许一个类的实例化延迟到其子类,从而使得类在创建对象的时候更具灵活性。

工厂方法模式解决了以下问题:

  1. 类的实例化延迟: 工厂方法模式通过将对象的实例化推迟到其子类,使得客户端代码可以与抽象类接口交互,而不依赖具体的实现类。这种灵活性允许系统更容易扩展和修改。

  2. 解耦客户端和具体类: 客户端通过工厂方法创建对象,而不需要知道具体的实现类。这种解耦使得客户端代码不受具体类的影响,可以轻松切换或添加新的实现类,而不影响客户端代码的稳定性。

  3. 符合开闭原则: 工厂方法模式使得系统更容易符合开闭原则,即对扩展开放,对修改关闭。通过添加新的具体工厂和产品类,而不需要修改现有的代码,实现了系统的可扩展性。

示例代码:

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

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

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

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

// 具体工厂 A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂 B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 使用具体工厂 A 创建具体产品 A
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.display();

        // 使用具体工厂 B 创建具体产品 B
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.display();
    }
}

在上述代码中,Factory 是工厂方法的抽象类,ConcreteFactoryAConcreteFactoryB 是具体工厂类,分别创建 ConcreteProductAConcreteProductB。客户端通过工厂方法 createProduct 创建产品,而不直接实例化具体产品类。这样,当需要新增产品时,只需添加新的产品类和对应的工厂类,而无需修改客户端代码。

相关推荐
思忖小下1 天前
梳理你的思路(从OOP到架构设计)_设计模式Factory Method模式
设计模式·工厂方法模式·eit
霁月风1 天前
设计模式——工厂方法模式
c++·设计模式·工厂方法模式
huaqianzkh8 天前
简单工厂、工厂方法、抽象工厂的区别
java·设计模式·工厂方法模式
西岭千秋雪_12 天前
设计模式の单例&工厂&原型模式
java·单例模式·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式·原型模式
huaqianzkh20 天前
工厂方法模式的理解和实践
java·设计模式·工厂方法模式
暮雨c20 天前
重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
设计模式·简单工厂模式·工厂方法模式
morning_judger22 天前
【设计模式系列】工厂方法模式(二十一)
java·设计模式·工厂方法模式
Theodore_102223 天前
12 设计模式之工厂方法模式
java·开发语言·算法·设计模式·简单工厂模式·工厂方法模式
重生之绝世牛码24 天前
Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解
java·大数据·开发语言·设计模式·工厂方法模式·设计原则·工厂模式
何朴尧25 天前
工厂方法模式与抽象工厂模式
c++·工厂方法模式·抽象工厂模式