工作两年后,我如何看待设计模式

在软件工程中,设计模式是经过反复验证的最佳实践 ,用于解决在软件设计中经常遇到的一类问题。它们为开发者提供了一种通用的解决方案和语言,使得复杂的编程问题得以简化,代码结构更加清晰,可维护性大大提高。简而言之,设计模式在应用程序中可以被统称为"套路"。

这个"套路"即是以高内聚和低耦合为底层思想,并且符合OOD设计原则。所谓OOD设计原则就是:

  • 单一职责原则:每个类应该有一个清晰明了的职责,只做与自己主要职责相关的事情,避免加入其它不相关的职责。这有助于降低类的复杂度,提高代码的可读性和可维护性。
  • 开放-关闭原则(Open-Closed Principle):软件实体(如类、模块、函数等)应当对扩展开放,对修改关闭。这意味着当需要添加新功能时,应尽量避免修改已有的代码,而是通过扩展的方式来实现。这有助于保持软件的稳定性和可维护性。
  • 里氏替换原则(Liskov Substitution Principle):在继承体系中,子类应当能够替换其父类并保持在软件中的行为不变。这要求子类在继承父类时,必须遵循父类的约定,以确保软件行为的正确性。
  • 依赖倒置原则:高层模块不应该依赖于低层模块,它们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。这一原则有助于减少类之间的耦合度,提高系统的可维护性和可扩展性。
  • 接口隔离原则:客户端不应该依赖它不需要的接口,即多个特定的客户端接口要好于一个通用性的总接口。这有助于避免接口的过度臃肿,使接口更加精简和专注。
  • 迪米特法则(最少知道原则):一个对象应当对其他对象保持最少的了解,即只与直接的朋友通信。这有助于降低系统的复杂度,减少类之间的耦合度。

这些原则共同构成了OOD的基石,指导开发人员在设计面向对象系统时遵循最佳实践,以创建出更加灵活、可扩展且易于维护的软件系统。

设计模式与编程语言或编程范式有关吗?

但是我们要注意的是,在不同的编程范式(如结构化编程、面向对象编程、函数式编程)对设计模式的应用和实现也会有所不同。例如,在函数式编程中,可能会采用不同于面向对象编程的设计模式来解决问题。

编程语言的特性会影响设计模式的实现方式,但设计模式本身是独立于具体编程语言的。

在面向对象编程中我们通常有二十三种设计模式,它们被分为三大类型:

创建型模式主要处理对象的创建机制,旨在将系统与使用哪个具体类的信息隔离开来,使得系统能够独立于如何创建、组合和表示对象。

结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

行为型模式关注对象之间的通信。

那么我们在编程中使用设计模式时主要依赖于哪些思维?

首先,需要具备强大的抽象思维能力。设计模式本身就是一种高度抽象的概念,它们提取了软件开发中的共性问题和解决方案。因此,使用设计模式时需要我们能够从具体的编程问题中抽象出共性的结构和行为,以便正确地选择和应用设计模式。

其次,结构化思维对于理解和应用设计模式至关重要。设计模式通常涉及到多个类和对象之间的交互,这就要求我们能够清晰地理解和描述这些交互关系,以及它们在整体设计中的作用。结构化思维有助于我们将复杂的设计问题分解为更小、更易于管理的部分,并找出各部分之间的关系。

另外,灵活性和可扩展性思维也是应用设计模式时必不可少的。设计模式的目标之一就是提高软件系统的灵活性和可扩展性,使系统能够更容易地适应未来的变化。因此,开发者在应用设计模式时,需要时刻考虑如何在满足当前需求的同时,为未来的变化留下足够的空间。

最后,创新思维对于设计模式的应用也至关重要。虽然设计模式提供了一套通用的解决方案,但在实际应用中,往往需要根据项目的具体需求和约束进行适当的调整和创新。这就要求开发者不仅要熟悉设计模式的基本原理,还要具备足够的创新意识和实践能力,以便将设计模式与项目的实际情况相结合,创造出既符合设计要求又具有创新性的解决方案。

总的来说,设计模式是编程中一种宝贵的工具,它们能够帮助我们解决复杂的问题,提高代码的质量和维护性。但同时,我们也需要谨慎地使用它们,以确保它们能够真正地为我们的项目带来价值。

相关推荐
程序员鱼皮1 小时前
我代表编程导航,向大家道歉!
前端·后端·程序员
zjjuejin1 小时前
Maven 生命周期与插件机制
后端·maven
阿杆1 小时前
为什么我建议你把自建 Redis 迁移到云上进行托管
redis·后端
Java水解1 小时前
go语言教程(全网最全,持续更新补全)
后端·go
bobz9652 小时前
QEMU 使用 DPDK 时候在 libvirt xml 中设置 sock 的目的
后端
thinktik2 小时前
AWS EKS 计算资源自动扩缩之按需申请Fargate[AWS 中国宁夏区]
后端·aws
thinktik2 小时前
AWS EKS 实现底层EC2计算资源的自动扩缩[AWS 中国宁夏区]
后端·aws
uhakadotcom2 小时前
什么是OpenTelemetry?
后端·面试·github
知其然亦知其所以然2 小时前
MySQL 社招必考题:如何优化特定类型的查询语句?
后端·mysql·面试
用户4099322502123 小时前
给接口加新字段又不搞崩老客户端?FastAPI的多版本API靠哪三招实现?
后端·ai编程·trae