C++设计模式(工厂方法模式)

简介: C++设计模式(工厂方法模式)

前言

本篇文章来带大家学习C++中的工厂方法模式

一、工厂方法模式介绍

工厂方法模式是一种创建型设计模式,用于通过工厂方法创建对象而不需要明确指定其具体类。该模式通过定义一个创建对象的接口,但将具体的对象创建延迟到其子类中。这样可以将对象的创建与使用分离,提高代码的灵活性和可扩展性。

UML结构图:

二、工厂方法模式和简单工厂模式对比

1.实现方式:

简单工厂模式:由一个工厂类负责创建对象,根据传入的参数或条件来决定创建哪种具体对象。相当于一个工厂类集中了所有产品的创建逻辑。

工厂方法模式:将对象的创建延迟到子类中,每个具体产品都有对应的工厂类,负责创建该产品。每个工厂类只负责创建一种具体的产品。

2.灵活性和扩展性:

简单工厂模式:通过一个工厂类集中管理对象的创建,增加新的产品时需要修改工厂类的代码,不符合开闭原则(对扩展开放,对修改关闭)。

工厂方法模式:每个具体产品都有对应的工厂类,新增产品时只需要添加新的具体产品和对应的工厂类,不需要修改现有代码。符合开闭原则。

3.耦合度:

简单工厂模式:客户端代码需要依赖工厂类,通过工厂类创建具体产品的实例。

工厂方法模式:客户端代码依赖抽象工厂和抽象产品类,通过抽象工厂创建具体产品的实例。客户端代码与具体工厂类和具体产品类解耦。

4.类的数量:

简单工厂模式:只需要一个工厂类负责创建所有产品,工厂类可能会变得很大。

工厂方法模式:每个具体产品都有对应的工厂类,类的数量比简单工厂模式多,但可以更细粒度地管理对象的创建。

三、工厂方法模式适用场景

1.对象的创建需要遵循特定的接口或抽象类:工厂方法模式适用于创建一组相关对象,这些对象共享一个公共的接口或抽象类。通过定义抽象工厂和具体工厂类,可以确保创建的对象都符合同一接口或抽象类的定义。

2.需要通过子类来决定创建的具体对象:工厂方法模式将对象的创建延迟到子类中,子类可以根据具体需求来选择实现哪种具体对象。这样可以在不修改客户端代码的情况下,动态地增加或切换具体对象的类型。

3.需要通过扩展来添加新的产品:如果系统中需要添加新的产品,工厂方法模式可以提供一种扩展机制,使得添加新产品变得更加容易。只需创建新的具体产品类和对应的具体工厂类,而不需要修改已有的代码。

4.需要对客户端代码与具体产品的耦合进行解耦:通过引入抽象工厂和具体工厂类,工厂方法模式可以将客户端代码与具体产品的创建过程解耦。客户端只需要依赖于抽象工厂和抽象产品类,而不需要自己直接创建具体对象,从而降低了耦合度。

四、工厂方法模式示例代码

#include <iostream>
#include <string>
// 抽象产品类
class Product {
public:
    virtual void use() const = 0;
};
// 具体产品类 A
class ConcreteProductA : public Product {
public:
    void use() const override {
        std::cout << "Using ConcreteProductA" << std::endl;
    }
};
// 具体产品类 B
class ConcreteProductB : public Product {
public:
    void use() const override {
        std::cout << "Using ConcreteProductB" << std::endl;
    }
};
// 抽象工厂类
class Factory {
public:
    virtual Product* createProduct() const = 0;
};
// 具体工厂类 A
class ConcreteFactoryA : public Factory {
public:
    Product* createProduct() const override {
        return new ConcreteProductA();
    }
};
// 具体工厂类 B
class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() const override {
        return new ConcreteProductB();
    }
};
int main() {
    // 使用具体工厂类 A 创建产品对象
    Factory* factoryA = new ConcreteFactoryA();
    Product* productA = factoryA->createProduct();
    productA->use();
    delete productA;
    delete factoryA;
    // 使用具体工厂类 B 创建产品对象
    Factory* factoryB = new ConcreteFactoryB();
    Product* productB = factoryB->createProduct();
    productB->use();
    delete productB;
    delete factoryB;
    return 0;
}

总结

本篇文章就讲解到这里。


相关文章
|
15天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
17天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
10天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
27 1
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
21 3
|
2月前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
2月前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
34 0