对于软件设计模式的想法

本文探讨了软件设计模式在系统架构中的应用,强调设计模式与架构相辅相成,分别介绍了行为模式、结构型模式和创建型模式,以及它们在解决实际问题和优化系统架构中的作用。
摘要由CSDN通过智能技术生成


前言

提示:本文主要介绍个人对软件设计模式的思考,是基于过往十多年开发经历中对于设计模式的应用总结。希望通过不断积累和实践,提高软件设计能力

设计模式是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。设计模式的主要目的是为了提高代码的可重用性、可理解性和可靠性。设计模式并不是算法,而是关注于对象和类之间的交互和设计决策,为解决特定类型的通用软件设计问题提供定制化的解决方案。这些模式可以视为一种共享的专业知识,有助于初学者和其他设计者掌握和理解复杂的设计概念。设计模式也被视为软件工程的基石,类似于建筑中的结构元素,对于构建可靠、高效的软件系统至关重要。个人实际应用中也会用到设计模式,有些是应用了但是没有意识到使用的是xxx模式。从个人经验出发,所涉及的设计模式整理如下:


一、设计模式与系统架构相辅相成

对个人而言,不同的设计模式是应用于不同场景的,用于解决和优化不同的问题。没有大一统的设计模式,放之四海而皆准,有的只是参考系统架构需要进行不同设计模式的选择和调整。比如系统讲究高度接入能力,一个入口处理多个功能,那么采用命令模式是一个很好的选择,提高了功能入口可重用性,但是降低了功能入口可理解性;系统对资源限制比较严格,那么就需要采用单例模式,尽可能提高资源对象的复用,但是可能会因为单点故障降低可靠性;系统需要动态实现规则计算,那么采用装饰者模式是一个很好的选择。同时,通过设计模式的优化,往往会发现系统架构需要优化的地方,通过引入新的设计模式可以优化系统架构。
因此,设计模式需要参考系统架构,并能通过优化设计模式的方式优化系统架构。

二、对行为模式的认识

行为模式的应用体现在系统外部交互层面,属于系统方法层的设计,也是对系统架构关联最多的模式。同一个系统功能,采用不同的行为模式往往就会呈现出不同的架构,会暴露出不同的方法给外部调用。

  1. 采用命令模式,可以设计一个大接口,用于接收不同的请求,并通过参数的方式对命令进行区分。
  2. 采用策略模式,可以让调用方选择具体执行策略,相比命令模式增加了策略名作为参数,将接口从业务上进行了区分,可以使得接口相对直观些。
  3. 采用模板模式,可以进一步减少外部请求参数的需求,但需要进行流程设计,抽象出统一的模板(不是所有的流程都可以做成模板的)。
  4. 责任链模式常见于web filter、规则引擎中,通过流程编排的方式实现,适用于有先后顺序且需要支持复杂、灵活多变的业务场景。
  5. 观察者模式常用于事件驱动的场景,通过事件监听的方式将业务逻辑触发和执行进行解耦,进而做到分布式计算,同时通过总线化、批处理的方式往往可以提高系统整体的执行效率。但是增加了系统复杂度,往往需要引入分布式锁、消息中间件、分布式事务中间件等技术。
  6. 中介模式常用于事件驱动、异步回调的场景,尤其使用用于解决多方角色参与的业务中。通过中介将多方网状交互简化成中心化的星形交互,各个角色只需要强依赖于中介即可,大大降低系统复杂度。但是增加了总的交互次数,并由于引入中心化节点降低了可靠性(需要保证中介的正常运行)。常见的C/S架构中的server本身就是一种中介模式
  7. 迭代器模式常用于集合类中
  8. 访问模式用于元素类比较固定,但是操作元素类的算法多的场景。经常和迭代器模式一起使用

三、对结构型模式的认识

结构模式的应用体现在对象实体设计中,属于业务领域层的设计。大多数情况会根据数据结构进行设计,一定程度上会影响系统架构

  1. 采用代理模式,可以实现对象的替代品,常用于在对象行为发生前后添加切面功能
  2. 桥接模式常用于面向接口编程,将抽象和实现进行分离。常用的spring中的ioc就是桥接模式的体现。缺点是不好直观的理解接口与接口的关系,还是需要通过查看实现类才能知道
  3. 适配器模式,可以给不可改变对象添加新功能,将功能不同的两个对象封装承一个对象
  4. 装饰器模式,适用于行为结构固定,但是可以通过引入动态对象实现新的行为。从对象功能而言,装饰模式比生成子类实现更为灵活
  5. 外观模式,又叫门面模式,常用于复杂系统的方法暴露。比如spring boot的启动等
  6. 享元模式,用于优化重复创建相同的对象,降低内存分配释放的开销

四、对创建型模式的认识

创建型模式用于控制对象的实例化,对系统架构影响最小。

  1. 采用单例模式,用于控制资源对象的初始化,避免重复创建
  2. 原型模式,用于需要创建重复对象、优化系统资源、避免在运行时消耗过多资源、确保对象的安全性等。可以基于原型模式快速copy、创建新的同类型对象
  3. 工厂模式,用于不指定具体类的情况下创建同类型产品对象,通过配置、参数的方式实现产品对象实例的多样化。不同类型的产品对象,对于不同的工厂
  4. 抽象工厂模式,将原本不同类型的工厂抽象成一个,可以支持创建多个不同类型的产品对象。缺点是扩展新的产品对象需要修改具体工厂实现类,导致不同类型产品对象之间存在互相影响。
  5. 建造者模式,用于分步骤创建复杂对象

总结

设计模式的应用和系统架构设计是相辅相成的。有了初步的系统架构设计后,可以考虑选择不同的设计模式,同时可以通过优化设计模式的方式对系统架构进行优化

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baidu_26507163

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值