设计模式 C (设计模式策略模式)
本文目录导航:
C++设计模式——Adapter适配器模式
适配器模式是一种结构型设计模式,旨在将已有接口转换为调用者所期望的另一种接口。
其原理是通过适配器类,使特定的API接口可以适应多种场景。
例如,一个名为Reader()的API接口仅能解析txt格式的文件,引入适配器后,它就能支持xml、json、csv等格式的文件。
适配器类作为桥梁,封装适配过程,仅对外提供适配后的API接口,隐藏了内部的转换细节。
适配器模式在现实世界中的应用广泛,如USB转接头实现typec接口转USB,以及设备网关实现ipv4与ipv6网络的互通。
模式的主要组件包括目标接口(提供统一接口,外部程序调用者期望使用的接口)、源接口(具备功能但与目标接口不兼容的接口)和适配器(实现目标接口的接口,通过继承或组合方式调用源接口)。
适配器模式具有多项优点,包括实现现有组件代码的复用、解决不同接口的兼容问题、降低接口之间的用法差异以及方便集成第三方库或API。
同时,适配器模式与桥接模式在用途上存在差异:桥接模式用于分离接口与实现,而适配器模式则专注于修改现有接口以解决兼容性问题。
适配器模式适用于多种场景,如兼容不同接口实现的业务需求、不同通信方式的转换(如UDP转内部共享内存通信)、以及解决代码中类之间交互的兼容问题。
在嵌入式开发中,适配器常以Wrapper形式存在,用于封装底层API或硬件接口,简化上层应用的调用。
然而,不建议在接口变动较大、对性能要求极高或需要适配地方过多的情况下使用适配器模式。
适配器模式的实现包括类适配器和对象适配器。
类适配器通过继承方式实现,可利用C++的多重继承特性,使得适配器能调用源接口的函数。
对象适配器则采用对象组合方式,通过包含源接口实例对象实现适配功能,其扩展性更好,便于加入新功能。
通过代码实战,可以更直观地理解适配器模式的应用。
例如,构建咖啡机和榨汁机的饮料机,采用对象适配器实现。
通过对比类适配器与对象适配器的代码,可以进一步分析它们的差异及其在实际场景中的应用。
深入学习适配器模式及其实现,可参考相关设计模式资源,如/design或/adapt等,以获取更详细的知识和案例。

C++ 设计模式 - 策略模式
策略模式定义多种处理同一场景的不同算法,这些算法可在不影响用户的情况下互相替换。
应用场景某会员制商场有两种级别会员:银卡会员、黄金会员,分别享有9折、8折购物优惠。
同时不同的会员用户在生日当天购物,会赠送不同的生日礼物。
分析场景比较简单,需要解决的问题是区分不同类型的顾客享有不同的权益(折扣和生日礼物)。
按照平常的编码习惯,通常会在需要区分用户等级的业务上加上if判断,实现不同等级顾客应享有的不同权益。
这种方案能快速的解决实际问题,但是随着业务需要,商场又要引进更高逼格的会员类型,譬如白金会员、钻石会员等。
此时,需要在散落在各处的业务代码上加上if补丁。
这种做法会引来如下问题:解决方案引入策略模式,将用户等级抽象,分别定义出用户所有的行为,不同等级的用户各自实现该等级应享有的权益。
策略模式CShop: 商场类。
实现不同等级顾客的折扣结算、生日礼物等。
持有CConsumer指针,根据需要指向具体的顾客实例(CCommonUser、CSilverUser、CGoldUser)。
CConsume: 顾客抽象类。
定义顾客所有的行为接口。
CCommonUser、CSilverUser、CGoldUser: 具体顾客类。
不同等级顾客实现有差异部分的接口。
执行效果客户端实现总结源码商店类接口更新顾客类型顾客类抽象接口具体顾客类:黄金会员客户端接口推荐文章C++ 设计模式 - 命令模式开源519文章目录
c++设计模式和框架?
外观模式,也称为门面模式,是一种结构型设计模式。
它的主要目标是为复杂的类或程序库提供一个简单的接口。
通过封装一系列独立模块的接口,外观模式允许客户端无需深入理解底层实现细节就能调用特定功能。
外观模式在解决客户端与第三方类代码之间的耦合问题时尤为有效。
比如在Android的Hal接口中,尽管底层实现使用C语言,Hal层却通过结构体指针封装了一套对外的功能接口,将硬件操作的实现细节与应用层解耦。
这样,应用层只需调用相应的Hal接口来控制硬件,而无需关注具体实现。
在规划旅行时,用户可能需要同时查阅地图APP和天气APP来制定路线和装备计划,这为用户带来了不便。
如果存在一个能够整合地图和天气信息的APP,用户就能通过一个应用完成旅行计划,简化了操作流程。
外观模式在实际编程中通过封装复杂的接口,帮助开发者和客户端专注于核心业务逻辑,而无需关注底层实现细节,实现了代码的解耦与复用。
通过类图描述外观模式的结构,源码实现则展示了如何通过接口和实现之间的分离来达到模式的效果。
在具体项目中,外观模式可以用于整合不同服务或功能模块,形成一致的对外接口。
例如,在一个包含多个第三方类的项目中,外观模式能够提供一个简洁的入口,方便客户端调用并管理这些复杂类。
通过实践案例分析,外观模式的使用能够显著提高代码的可读性和可维护性,同时降低开发成本。
在编写源代码时,关键在于设计一个能够覆盖所有必要功能的外观类,以及定义清晰的接口。
综上,外观模式通过提供一个统一的接口来封装复杂功能,简化了客户端与底层实现之间的交互,提高了代码的可维护性和可扩展性。
在实际应用中,通过合理的类设计和接口定义,外观模式能够有效解决耦合问题,优化开发流程。