首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++设计模式——策略模式

在软件开发中,设计模式是提高代码可读性、可维护性和可扩展性的重要工具之一。其中,策略模式是一种行为型设计模式,它允许在运行时选择不同算法的行为,并支持不同策略的无缝切换。...概述 策略模式定义了一系列算法/场景,并使它们能够相互替换,从而使算法可以独立于其使用者而变化。在策略模式中,算法被封装成单独的类,使得它们可以在运行时切换。...代码示例 需求 假设有如下需求,某个酒店拥有自己的会员等级和会员制度,普通会员没有折扣;黄金会员享受9折优惠;钻石会员享受8折优惠;如何设计这套系统。...总结 策略模式是一种简单而灵活的设计模式,可以在运行时动态选择算法,从而提高代码的可扩展性和可维护性。...通过C++代码示例,我们了解了策略模式的基本结构和应用场景,并实现了一个简单的购物车系统来演示其用法。

10210

C++】设计模式:工厂模式

工厂模式 工厂模式属于创建者模式,提供了一种创建对象的最佳方式。 工厂模式的实现方式有简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。 简单工厂模式与工厂模式的结构组成是: 1....工厂方法模式 简单工厂模式存在最大的问题是违背了“开闭原则”,每当增加新的产品时,需要修改工厂类的逻辑。为了规避这种不足,同时很好的利用简单工厂模式的优点,这里介绍工厂方法模式。...工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。...工厂方法是使用频率最高的设计模式之一,是很多开源框架和API类库的核心模式。 3. 抽象工厂模式 汽车厂为了扩大业务,不只生产汽车了,还生产摩托车。抽象工厂模式可以创建多个工厂和多个产品族。...; 产品结构稳定,设计完成之后不会向系统中新增或剔除某个产品。

12010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++设计模式 - 装饰模式

    装饰模式 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...--百度百科 装饰者模式主要是为一个对象增加新的行为,效果与子类扩展父类类似,但实现方式与继承不同,且更加灵活。 装饰模式类图 image.png Componet: 定义接口基类。...解决方案 引入装饰模式,在原有的日志的接口上封装一层修饰代码。这样就无需修改原先的日志代码,同时保证了新需求的开发。.../ 输出至终端 fprintf(stdout, "%s", msg); // 添加新职能 return CCustomLog::WriteLog(tag, msg); } 总结 装饰模式的实现方法...装饰模式只是改变其外表的部分,原本的功能还是保留的。 在使用时,能够在不修改原有功能基础上,随意增加需要的功能。使用起来也比较灵活。 缺点在于,装饰模式对初始化要求较为严格,且代码难以理解。

    30730

    C++设计模式 - 状态模式

    状态模式 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 --百度百科 简单地说,状态模式就是状态机设计。...总结 状态模式的实现方法难度不大,主要是编程的思想的上升。将状态与需求绑定,不仅能够实现统一需求的不同响应方式,还能实现某些状态下不响应指定需求。场景清晰,思路明确。...状态模式的使用,可以使关注点仅放在当前状态遇到需求产生的完整流程。无需考虑其他状态的影响。 将需求与响应解耦,还能够实现通信管理。...例如,不同进程间的需求响应,可以将两者通信设计为不涉及业务的跨进程通信,从而实现通信代码的可复用。 总的来说,状态模式是一种非常实用的设计模式。...不仅是从代码上还有设计思路上,减轻设计师对复杂业务的整理工作。相同的完美!

    77900

    C++设计模式 - 策略模式

    策略模式 策略模式定义多种处理同一种场景的不同算法,这些算法可在不影响用户的情况下互相替换。 场景 应用场景 某会员制商场有两种级别会员:银卡会员、黄金会员,分别享有9折、8折购物优惠。...\n", cost, theShop.GetUserDesc().c_str(), theShop.GetCurrentDiscountRate...\n", cost, theShop.GetUserDesc().c_str(), theShop.GetCurrentDiscountRate...\n", cost, theShop.GetUserDesc().c_str(), theShop.GetCurrentDiscountRate...策略模式与命令模式有点相像。两者的实现方式类似,应对的场景不同。策略模式针对的是同一个行为不同的算法实现;命令模式针对是一个命令对应一个解决的方法。 全部源码可在公众号后台输入标题获取。

    33820

    C++设计模式 - 代理模式

    代理模式 ❝代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。...代理模式在Android中被用到很多。...源码实现 「编程环境」 编译环境: Linux环境 语言: C++语言 编译命令: ....因此在引用设计模式时,并不需要完全按照其规定的方式来实现,理解其中的设计思想,结合自身情况,实现方式合理即可。 代理模式在安卓中被广泛运用到,例如binder。...更多文章内容包括但不限于C/C++、Linux、开发常用神器等,可进入“开源519公众号”聊天界面输入“文章目录” 或者 菜单栏选择“文章目录”查看。公众号后台聊天框输入本文标题,在线查看源码。

    24830

    C++设计模式--Visitor模式

    设计模式中,Visitor模式可以实现数据结构和数据操作的分离,主要适用以下场景: 数据结构稳定,但是针对数据的操作需求多样化; 在对数据进行操作过程中,不期望改变数据结构的组织方式。...在编译器设计中,源码经过词法分析、语法分析和语义分析后会生成抽象语法树(AST)。然后基于AST做一些分析转换,比如转换到IR结构或者进行一些优化。...这种场景非常适合使用Visitor模式来处理。...下文以cpp代码模拟一个简单文件系统中,Visitor模式遍历目录树的实现,方便对Visitor模式的理解。...Visitor模式中的双重分发(Double Distribution) 双重分发其实就是分别利用了c++中的多态和重载特性,分实现了对数据元素的遍历与访问。

    34820

    C++设计模式 - 原型模式

    原型模式(Prototype) 原型模式是一种创建型设计模式,其功能为复制一个运行时的对象,包括对象各个成员当前的值。而代码又能保持独立性。...如果不加设计,这些代码可能散落在客户端函数。假如过了十年继续施展分身,又需重新增加这些代码。日积月累,这些终将成为晦涩而又难以维护的“一坨”。...实现 对于上述场景就有必要引入原型模式,原型模式设计也是比较简单的。只需要在类的设计时增加一个clone接口,用于返回当前对象this指针。...类图 原型模式 通过原型模式基类规范具备复制接口的子类实现。...总结 原型模式能够克隆一个对象,而类之间无需耦合。 客户代码在复制复杂的对象时,也更加方便。 此接口可重复使用,让代码逻辑更加清晰易懂。

    29730

    C++设计模式 - 享元模式

    -- 《水晶之恋》 享元模式 ❝享元模式是一种结构型设计模式, 它允许你在消耗少量内存的情况下支持大量对象。...如果此时设计一个对象池,里面缓存一定的对象,软件在用时申请,不用时回收。就能实现对象的重复利用,而多次创建和销毁对象。...源码实现 「编程环境」 编译环境: Linux环境 语言: C++语言 编译命令: make 「工程结构」 Flyweight/ ├── led.cc ├── led_factory.cc ├── led_factory.h...在《设计模式》中指出,「享元模式」可使用在类变量过多,反复创建/销毁会消耗资源的场景下。但是在笔者思考后发现,也可以用于对共享资源的管理上,于是有了本文。 在其他大佬总结中,很少看到代码中有回收动作。...更多文章内容包括但不限于C/C++、Linux、开发常用神器等,可进入“开源519”公众号聊天界面输入“文章目录”, 或菜单栏选择“文章目录”查看所有文章。后台聊天输入本文标题,可查看源码。

    32420

    C++设计模式——Proxy代理模式

    一,代理模式简介 代理模式是一种结构型设计模式,该模式通过引入一个新的代理对象Proxy,来间接访问原始对象,从而使访问方式变得灵活和可控。 代理对象的设定减少了客户端与真实对象之间的直接交互。...; } }; int main() { Proxy p; p.request(); } 运行结果: RealSubject.request() 补充:在C+...+编码中,确实可以通过继承和虚函数实现父类调用子类的成员函数,这是C++多态特性的一种常见应用方式。...五,代理模式的优缺点 代理模式的优点: 可以在不修改被代理对象的情况下,增加额外的功能或控制访问方式。 可以在访问对象之前和之后进行一些处理,比如添加日志、添加时间戳等。...image: example.jpg Displaying image: example.jpg 七,参考阅读 https://www.geeksforgeeks.org/proxy-pattern-c-design-patterns

    18610

    C++设计模式——State状态模式

    一,状态模式的定义 状态模式是一种行为型设计模式,状态模式允许对象在内部状态发生切换时改变它自身的行为。...状态模式的主要目的是将复杂的状态切换逻辑抽象化为一组离散的状态类,使代码结构更加清晰和易于维护。 状态模式将对象的行为封装到不同的状态类中,从而在应用程序的状态发生改变时,会自动切换到对应的状态类。...状态模式使得状态的切换被表现为类对象的切换。 状态模式在现实生活中的抽象实例: 交通信号灯:交通信号灯有红灯、绿灯等多种状态。每个状态都定义了不同的行驶规则。...二,状态模式的结构 状态模式主要包含以下组件: 1.状态上下文(Context): 状态上下文是一个持有状态对象的类,它持有一个状态对象的引用,对外提供了切换状态的统一接口。...五,状态模式的优缺点 状态模式的优点: 修改灵活,当系统需求变化时,可以方便地添加、删除或修改状态,无需修改大量代码。 扩展性强,方便添加新的状态。

    9610

    C++设计模式 - 单例模式

    单例模式(Singleton) 介绍 单例模式是创建型设计模式,即用于创建对象的设计。其能够保证当前系统仅存在一个实例,并提供获取该实例的接口供客户端使用。...当强行new操作时,编译报错) 单例模式的实现较为简单,部分专家并不认为其是一种设计,而是一种编程技巧。 意义 既然存在单例模式,那么其存在的意义是什么呢?又或者说能解决什么问题?...若设计对共享资源进行管理的单例类,所有的任务都只能通过单例类来访问共享资源。就可以实现此种需求。 实现 在上述介绍中,已经大致描述了单例的特点: 创建唯一的实例 。...类图 单例模式 代码 #include #include #include using namespace std; class CSingleton...总结 单例模式目前使用的较为流行,其实现方法也比较简单。当遇到需要管理公共资源时,可以采用单例模式

    47030

    C#设计模式之策略模式

    背景:   策略模式在我们实际项目开发中,使用的比较多的一种设计模式,直接贴一个demo处理供大家参考,如有不对的地方,多多指点交流 定义:   策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中...策略模式使得算法可以在不影响到客户端的情况下发生变化。...策略模式使得算法可以在不影响到客户端的情况下发生变化。 /// 结构:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。.../// 策略模式通常把一系列的算法包装到一系列的策略类里面。...//···避免使用多重条件选择语句,充分体现面向对象设计思想。 //  主要缺点: //··客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

    81350

    C++设计模式——Command命令模式

    一,命令模式的定义 命令模式是一种行为型设计模式。在实际开发场景中,命令模式将一个请求的处理或者一个具体操作封装为一个对象,从而可以让开发者根据不同的请求参数来生成不同的执行函数。...命令模式的本质是对具体命令的拆解和封装,实现命令发送者和命令接收者的解耦。 命令模式使得具体的命令可以被存储和传递,由命令接收者来指定这个命令何时被执行、撤销等。...二,命令模式的结构 命令模式主要包含以下组件: 1.抽象命令接口(Command): 定义了命令的执行方法,内部包含一个execute()函数,用于定义命令的请求过程。...五,命令模式的优缺点 命令模式的优点: 命令模式将发送者和接收者解耦,使得两者可以分别独立变化。 扩展性好,新的命令可以很容易地添加和维护,不影响现有系统。...七,参考阅读 https://www.geeksforgeeks.org/command-pattern/ https://www.geeksforgeeks.org/command-pattern-c-design-patterns

    8610

    C++设计模式——Strategy策略模式

    一,策略模式简介 策略模式是一种行为型设计模式,策略模式在软件开发场景中定义了一系列的算法,并将每个算法单独封装在可替换的对象中,使应用程序在运行时可以根据具体的上下文来动态地选择和切换算法,同时保持原有的代码架构不被修改...策略模式设计使得算法的实现与调用被分离,让算法可以独立于外部客户端进行开发和改动,使用独立的类来封装特定的算法,也避免了不同算法策略之间的互相影响。...通用API开发:当同一个API需要提供多个版本或业务逻辑时,策略模式可以帮助隐藏具体细节。 五,策略模式的优缺点 策略模式的优点: 对“开闭原则”提供完美支持。...策略模式的缺点: 使类和对象的数量变得更多,增加了系统的复杂性。 如果策略被划分得过于细化,会导致过度设计,不易于代码理解。 代码涉及多个对象的创建和销毁,性能开销增大,大量使用会引起性能问题。...SelectionSort. 5 6 7 32 45 100 七,参考阅读 https://www.geeksforgeeks.org/strategy-method-design-pattern-c-design-patterns

    8310

    C++设计模式 - 责任链模式

    责任链模式 ❝责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。...意义 责任链模式是一个很贴近生活的设计模式,使每个对象做好自己分内的事情即可。当一个请求来的时候,当前处理对象不能处理,那就交给下一个处理对象,至于是谁处理无需关心。...源码实现 「编程环境」 编译环境: Linux环境 语言: C++语言 编译命令: make 「工程结构」 ChainOfResponsibility/ ├── app_view.cc ├── app_view.h...其实现方式可根据不同的需求有不同的设计,关键在于其模式思想。 「优点」 降低了对象之间的耦合度。...更多文章内容包括但不限于C/C++、Linux、开发常用神器等,可进入“开源519公众号”聊天界面输入“文章目录” 或者 菜单栏选择“文章目录”查看。公众号后台聊天框输入本文标题,在线查看源码。

    36210
    领券