【C++ 设计模式】策略模式与简单工厂模式的结合

这篇具有很好参考价值的文章主要介绍了【C++ 设计模式】策略模式与简单工厂模式的结合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在软件设计中,常常会遇到需要根据不同情况选择不同算法或行为的情况。策略模式和简单工厂模式是两种常见的设计模式,它们分别解决了对象行为的抽象和对象创建的抽象问题。在某些情况下,将这两种模式结合起来可以更好地满足实际需求,提高代码的灵活性和可维护性。

策略模式与简单工厂模式的结合:

策略模式用于定义一系列算法,将每个算法封装到独立的类中,并使它们可以相互替换,从而使得算法可以独立于客户端而变化。简单工厂模式用于封装对象的创建过程,将对象的创建与客户端解耦。

将策略模式与简单工厂模式结合起来,可以使得在创建具体策略对象时更加灵活,同时保持了策略对象的封装性。通过简单工厂模式,我们可以根据客户端的需求动态创建不同的具体策略对象,而策略模式则确保了这些对象可以被客户端无缝地使用。


一、为什么需要策略模式+简单工厂模式

当我们面对需要根据不同情况选择不同算法或行为的情况时,策略模式是一个很好的选择。它允许我们将不同的算法封装成独立的类,并且可以在运行时灵活地切换这些算法,而不影响客户端代码。然而,单独使用策略模式时,我们需要在客户端代码中显式地创建具体策略对象,这可能导致代码变得复杂,尤其当需要根据不同条件选择不同的策略时。

这时候,简单工厂模式可以派上用场。简单工厂模式提供了一个统一的接口来创建对象,客户端只需提供简单的参数,而不必了解具体对象的创建过程。将策略模式与简单工厂模式结合起来,可以在需要时动态地创建不同的具体策略对象,同时保持代码的简洁和可维护性。简单工厂模式负责对象的创建,而策略模式确保了这些对象可以被灵活地使用,让我们的软件更加智能和适应变化。这种结合使用的设计模式能够提高代码的灵活性、可扩展性和可维护性,使得软件系统更加健壮和易于理解。

二、策略模式+简单工厂模式实现原理

  • 策略模式:

首先定义一个策略接口(或抽象类),其中包含定义了一系列算法的方法。
创建具体的策略类,分别实现策略接口中的方法,每个具体策略类代表一个具体的算法。
在客户端中,持有一个策略接口的指针(或引用),可以动态切换不同的具体策略对象。
当客户端需要使用某个具体的算法时,调用策略接口中定义的方法即可。

  • 简单工厂模式:

创建一个工厂类,负责根据传入的参数来创建具体的对象。
工厂类中包含一个方法,根据不同的参数返回不同的具体对象实例。

  • 结合实现原理:

在策略模式中,客户端通常需要显式地创建具体策略对象,这可能会导致代码的复杂性。
为了解决这个问题,可以将具体策略对象的创建委托给简单工厂,通过简单工厂模式动态地创建具体的策略对象。
这样,客户端只需要和简单工厂打交道,向工厂传递参数即可获取所需的具体策略对象,而无需直接创建对象。
当需要在运行时根据不同条件选择不同的策略时,可以通过简单工厂来创建不同的策略对象,然后使用策略模式来执行具体的算法。

三、UML图

【C++ 设计模式】策略模式与简单工厂模式的结合,C++ 设计模式,c++,设计模式,策略模式,uml,开发语言,简单工厂模式,c语言
通过UML图可以发现简单工厂模式和策略模式+简单工厂模式非常的像啊!其主要差别就是工厂生成的类有一个统一执行的函数execute函数用来变成策略模式,进而就有了策略模式的特征了

四、示例代码

#include <iostream>
#include <memory>

// 抽象策略类
class Strategy {
public:
    virtual void execute() const = 0;
    virtual ~Strategy() {}
};

// 具体策略类 A
class ConcreteStrategyA : public Strategy {
public:
    void execute() const override {
        std::cout << "Executing strategy A\n";
    }
};

// 具体策略类 B
class ConcreteStrategyB : public Strategy {
public:
    void execute() const override {
        std::cout << "Executing strategy B\n";
    }
};

// 工厂类,用于创建具体策略对象
class StrategyFactory {
public:
    static Strategy* createStrategy(char type) {
        switch (type) {
        case 'A':
            return new ConcreteStrategyA;
        case 'B':
            return new ConcreteStrategyB;
        default:
            throw std::invalid_argument("Invalid strategy type");
        }
    }
};

int main() {
    // 使用工厂类创建具体策略对象
    auto strategyA = StrategyFactory::createStrategy('A');
    auto strategyB = StrategyFactory::createStrategy('B');

    // 执行策略
    strategyA->execute();
    strategyB->execute();

    return 0;
}

【C++ 设计模式】策略模式与简单工厂模式的结合,C++ 设计模式,c++,设计模式,策略模式,uml,开发语言,简单工厂模式,c语言
抽象策略类(Strategy):定义了执行策略的接口 execute(),所有具体策略类都要实现这个接口。

具体策略类(ConcreteStrategyA 和 ConcreteStrategyB):实现了具体的策略,分别是策略 A 和策略 B。它们提供了不同的行为实现方式。

工厂类(StrategyFactory):用于创建具体策略对象。createStrategy 方法根据传入的参数类型决定创建哪种具体策略对象。

主函数(main):在 main 函数中,通过工厂类创建了具体的策略对象 strategyA 和 strategyB,分别对应策略 A 和策略 B。然后调用这些策略对象的 execute() 方法执行相应的策略。

实现决策的原理在于通过工厂类的 createStrategy 方法根据输入的参数类型来动态创建具体的策略对象。这种方式使得客户端代码与具体策略对象的创建过程解耦,同时利用了策略模式的灵活性,能够在运行时动态地切换不同的策略。


总结

策略模式与简单工厂模式的结合,能够很好地将对象的行为和对象的创建分离,使得系统更具灵活性和可扩展性。通过将具体策略对象的创建委托给简单工厂,我们可以在不改变客户端代码的情况下动态地切换不同的策略,从而更好地满足不同的业务需求。这种结合使用的设计模式在实际项目中具有广泛的应用价值,可以帮助我们更好地组织和管理代码结构,提高代码的可维护性和可扩展性。文章来源地址https://www.toymoban.com/news/detail-840624.html

到了这里,关于【C++ 设计模式】策略模式与简单工厂模式的结合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式:策略模式和工厂模式混合使用

    有时单个设计模式并不能满足我们的业务需求,这个时候就要根据具体的业务来混合使用设计模式,其中策略模式和工厂模式是比较常用的一个组合。工厂模式可以管理具体策略的生命周期,策略模式可以丰满具体细节的逻辑。 在这个示例中,我们定义了一个策略接口和两个

    2024年02月07日
    浏览(35)
  • 设计模式-策略工厂

    在介绍策略工厂的实现前,我们要先了解spring中beanFactory: BeanFactory 作为IOC服务的提供者,通过XmlBeanFactory来得到实例 生产Bean的工厂,采用延迟初始化策略(只有在需要某个对象时,才进行初始化和依赖注入); 通常会用xml文件来注册并管理各个业务对象之间的依赖关系

    2024年02月11日
    浏览(37)
  • 自学设计模式(简单工厂模式、工厂模式、抽象工厂模式)

    使用工厂模式来生产某类对象(代码简化且容易维护,类之间有血缘关系,可以通过工厂类进行生产); 简单工厂模式(用于创建简单对象) 对于简单工厂模式,需要的工厂类只有一个; 在工厂类中的公共成员函数来创建所需对象; 工厂模式 简单工厂模式会违反开放封闭

    2024年02月11日
    浏览(43)
  • 设计模式(二)、工厂模式--简单工厂模式

    简单工厂模式:又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。 需要注意的是:简单工厂模式属于创建型模式,但不属于23种GOF设计模式之一  该模式主要有以下几个模块构成: 具体说明结合代码,如下: 代码中主要是有一个cake接父类,两个

    2024年02月13日
    浏览(50)
  • Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月14日
    浏览(44)
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

            在平时的开发中,涉及到设计模式的有两块内容,第一个是我们 平时使用的框架 (比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。         面试官一般比较关心的是你在开发过程中, 有没有使用过设计模式,或者你在简历上写了关于设计

    2024年02月10日
    浏览(56)
  • 设计模式-简单工厂模式(静态工厂模式)java实现

    简单工厂模式根据所 提供的参数 数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。   意图 提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator)角色

    2024年02月13日
    浏览(53)
  • 设计模式-简单工厂模式

    简单工厂模式又称为静态工厂模式,其实就是根据传入参数创建对应具体类的实例并返回实例对象,这些类通常继承至同一个父类,该模式专门定义了一个类来负责创建其他类的实例。  这就是工厂类,提供一个方法创建具体类的实例 优点:将对象的创建于使用分离,创建完

    2024年02月12日
    浏览(44)
  • 设计模式(简单工厂模式)

    从建筑设计领域引入到计算机科学中 设计模式一共有23种 代码设计经验的总结,稳定,拓展性更强。一系列编程思想 作用:代码更容易被他人理解、保证代码可靠性、程序的重用性。 详细介绍:[https://www.runoob.com/design-pattern/design-pattern-tutorial.html]: 学习简单工厂模式的目的:

    2024年02月13日
    浏览(43)
  • 【设计模式】简单工厂模式

    分析: 这一题看上去很简单,但如果面试时你写的是下面这种代码,那大概率是过不了的。 上面代码也能实现题目的功能,但是代码没有错就是好的吗? 以上代码复用性低;可维护性差,如果要改+的逻辑,就会牵一发而动全身;扩展性差,如果这个时候新增开平方的逻辑怎

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包