当前位置: 首页 > article >正文

c++设计模式模块与系统

c++ 中lambda 本质就是一个匿名(没有名)的函数; 可以用一个数组元素存储一个函数的指针; 通过数组下标来使用函数;

高内聚低耦合

如何理解设计模式中的高内聚低耦合

  1. 高内聚: 用于指导如何组织和划分软件设计。

    **定义:**高内聚指的是在一个模块(如一个类或函数)中,所有的元素(如方法、属性等)都紧密地关联在一起,共同完成一个单一的任务或目标。简单来说,高内聚意味着模块内部的各个部分应该围绕一个单一的目标组织起来,而不是分散在多个不同的目标上。

重点强调是组合在一起完成一个功能。 这要求把控一个api足够单一完成某项功能的一部分。

当然有的api可以做成通用的,在不同功能内部使用。 这违反单一职责原则。 但同时只要他功能足够单一同时分布在不同功能中,也不违反高内聚。 重点强调功能单一。 它告诉功能类似的api 最好分开写多个api满足特定需求,而不要尝试一个api满足不同相似功能的需求。

2.低耦合 就很好理解。 功能与功能直接不要强相关, 即修改一个地方别的地方都要多很多修改。 修改一个功能影响很多其他功能, 影响的越多耦合性越大,反之越小。

可读性与可扩展性

代码的命名规则:

(变量)(函数)(类) (结构体)()命名 展示了代码的可读性。 让人一眼就能看懂的命名。

1.匿名函数

std::vector<std::function<int32_t()>> pos_func ={
                   [&lineup]() ->int32_t { return lineup->GetPos1Hero(); } ,
                   [&lineup]() ->int32_t { return lineup->GetPos2Hero(); } ,
                   [&lineup]() ->int32_t { return lineup->GetPos3Hero(); } ,
                   [&lineup]() ->int32_t { return lineup->GetPos4Hero(); } ,
                   [&lineup]() ->int32_t { return lineup->GetPos5Hero(); } ,
                   [&lineup]() ->int32_t { return lineup->GetPos6Hero(); } ,
          };
          int32_t source_hero = pos_func[request.pos - 1]();

2.模版类

template<typename ...Args>
class dispatcher;
template<typename Tag, typename Ret, typename ...Args>
class dispatcher<Tag, Ret(Args...)>
{
};

static dispatcher<CopyType, std::unique_ptr<LogicCopy>(user_data_ptr, const copy_elem*, const copy_para_t&, const PackFightResultPara&)>
    g_copy_dispatcher;

3.工厂方法

// 抽象基类

// 工厂1
// 工厂2
// 工厂3
创建对象 采用模版类根据类型创建对象



4.C++ 功能的模块和系统的设计

4.1模块设计原则

模块(Module)通常指的是一组相关功能的集合,这些功能共同完成某个特定任务。模块应该是独立的,具有清晰的接口和职责。

设计原则
  • 单一职责原则(SRP):一个模块应该只有一个职责,这样它更容易理解和修改。
  • 封装:将实现细节隐藏在模块内部,只暴露必要的接口。
  • 高内聚低耦合:模块内部的功能应该高度相关(高内聚),而模块之间的依赖关系应该尽量减少(低耦合)。

4.2系统设计原则

系统是多个模块的组合

设计原则
  • 分层设计:将系统划分为不同的层次(如数据访问层、业务逻辑层、表示层等),每个层次有明确的职责。
  • 依赖注入:通过依赖注入(Dependency Injection)来管理模块之间的关系,避免硬编码依赖。
  • 事件驱动设计:使用事件和消息传递来解耦模块之间的直接依赖。
实现方法
  • 工厂模式:使用工厂模式来创建和管理模块的实例。
  • 依赖注入容器:使用依赖注入容器来管理模块之间的依赖关系。
  • 事件系统:使用事件系统来解耦模块之间的直接调用。

设计上的平衡

设计一个系统

工厂基类,工厂类1,工厂类2,工厂类3

模版类: <类型,工厂对象指针>

全局静态模版类实例:


http://www.kler.cn/a/415003.html

相关文章:

  • 『python爬虫』使用docling 将pdf或html网页转为MD (保姆级图文)
  • 使用 Docker Compose 来编排部署LMTNR项目
  • GaussDB高智能--智能优化器介绍
  • 联想品牌的电脑 Bios 快捷键是什么?如何进入 Bios 设置?
  • 常见的Web安全漏洞——XSS
  • C中指针在64位操作系统下为什么是4而不是8
  • 机器学习之RLHF(人类反馈强化学习)
  • 11.22Pytorch_自动微分
  • LeetCode 2290. Minimum Obstacle Removal to Reach Corner
  • vue3+ant design vue实现上传组件图片默认展示
  • 技能之发布自己的依赖到npm上
  • 生成二维码vue2
  • java全栈day10--后端Web基础(基础知识)之续集
  • 贵阳思普信息技术有限公司 OA系统 apilogin 接口存在SQL注入漏洞风险
  • 如何利用Java爬虫按关键字搜索工厂数据
  • JVM的内存区域划分
  • 【前端知识】SCSS(Sassy CSS)是一种CSS预处理器语言
  • 《Learn Three.js》学习(2)构建Three.js基本组件
  • 专业学习|如何绘制算法流程图?
  • 华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
  • http的文件上传和下载原理
  • 什么是C++中的函数对象?
  • 【二分查找】力扣 34. 在排序数组中查找元素的第一个和最后一个位置
  • 鸿蒙多线程应用-taskPool
  • spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException
  • Linux中网络文件系统nfs使用