前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次设计模式分享内容的思考

一次设计模式分享内容的思考

原创
作者头像
孟君
发布2023-05-06 07:44:06
3040
发布2023-05-06 07:44:06
举报

五月份将轮到我第二次分享设计模式。本文算是我对即将到来的分享的一次大纲梳理。主要内容包含如下四个部分:

  • 软件质量的理解
  • 重温S.O.L.I.D原则,包含Good和Bad示例
  • 设计模式现实项目中的实战
  • 设计模式的扩展

接下来,我大致列一下每个板块的内容。

软件质量的理解

在这个部分,我想大致从如下几个方面进行:

  • 我们为什么要关注代码?

软件缺陷分布、不同阶段修复Bug的成本进行说明。

图片
图片
  • 软件质量模型主要有哪些方面?

了解不同的软件质量模型,看看其关注点有哪些。

图片
图片
图片
图片
  • 编写可维护性的原则(高内聚、低耦合)
图片
图片
  • 分离关注点
  • 圈复杂度

给出圈复杂度的计算方法、圈复杂度的意义以及与软件质量的关系。

图片
图片

重温S.O.L.I.D原则

违反SOLID原则以及符合原则的示例,也就所谓的BAD以及GOOD示例。通过对比,增加大家对设计原则的理解,并掌握一些套路 。

以下给出一个违反单一职责原则的示例。

单一职责原则(Single Responsibility Principle,SRP):一个类只负责一个功能领域中的相应职责或可以定义为:就一个类而言,应该只有一个引起它变化的原因。

违反SRP原则的示例

图片
图片
图片
图片

在这个示例中,Person类包含了一个名为Wallet的成员变量,并且该类还包含了两个方法来添加和删除钱包中的金额。

这违反了SRP原则,因为Person类应该只负责表示一个人的信息,而不应该与钱包的操作有关。应该将钱包的操作单独封装到一个Wallet类中,让Person类只负责人的信息。

符合SRP原则的示例

图片
图片

在这个示例中,Person类仅包含一个名为Wallet的成员变量,而不包含任何关于钱包的操作。这里将钱包的操作单独封装到Wallet类中,让Person类只负责人的信息。

这样,当需要修改钱包的操作时,只需修改Wallet类即可,而不会影响到Person类的实现。

图片
图片

设计原则现实项目中的实战

在这个部分,我想给出如下几个设计模式:

  • 代理模式

我们可以使用代理模式在目标对象实现的基础上,以增加额外的功能操作或者逻辑,即可扩展目标对象的功能。比如以给出方法耗时时间打印为示例。

从静态代理说起,然后引出动态代理。

  • 当目标对象实现了接口时,就使用JDK动态代理;
  • 当目标对象没有实现接口时,就使用CGLIB代理。

并说明相关原理说明。

  • 策略模式

以不同行业执行不同指标计算为示例,给出策略模式

  • 模版方法模式

比如:我们有不同渠道去扣税,每个渠道的输入报文各不相同,但是,其大致的流程有类似性:

图片
图片

又如API开放接调用,包括粗略的几个统一步骤:

  • 参数验证
  • 流量检查
  • 执行业务逻辑
  • 调用记录落库和相关通知操作
  • 扣除流量
  • 返回结果
  • ... ... 
  • 状态模式

给出对账流程的示例,我们模拟监听目录查看是否有对账文件到达。

如对账文件到达,则我们开启对账处理流程,经历文件达到状态、准备数据状态、处理中状态以及完成对账状态4个阶段,不同状态下处理不同的逻辑。

设计模式扩展

补充23种模式之外的几种设计模式,比如空对象模式、对象池模式以及规格模式

最后,给出一个抽象 + 多态的魅力,看看其在不同模式间的演变和作用。

大致先构思这么多 ... ... 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档