设计模式之美 · 设计原则和思想

设计原则

​ 设计原则是指导我们代码设计的一些经验总结。设计原则这块儿的知识有一个非常大的特点,那就是这些原则听起来都比较抽象,定义描述都比较模糊,不同的人会有不同的解读。所以,如果单纯地去记忆定义,对于编程、设计能力的提高,意义并不大。对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。只有这样,我们才能在项目中灵活恰当地应用这些原则。对于这一部分内容,你需要透彻理解并且掌握,如何应用下面这样几个常用的设计原则。

  • SOLID 原则 -SRP 单一职责原则
  • SOLID 原则 -OCP 开闭原则
  • SOLID 原则 -LSP 里式替换原则
  • SOLID 原则 -ISP 接口隔离原则
  • SOLID 原则 -DIP 依赖倒置原则
  • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则
SRP(Single Responsibility Principle):一个类只能承担一个事情 
OCP(Open Closed Principle):实现不可修改,但面向扩展开放
LSP(Liskov Substitution Principle):子类型能够替换它们的基类型,避免子类重写父类中已经实现的方法
ISP(Interface Segregation Principle):抽象不持有特定逻辑,应持有实现的公有逻辑
    1.接口里不要有其它的功能,比如查一个订单的,你调个接口还查一遍用户,浪费数据库消耗
    2.不要影响到实现类,比如你突然throws异常
DIP(Dependence Inversion Principle):高底层不能互相依赖,应同时依赖抽象 
DRY(Don't Repeat Yourself):不做重复的事,不写重复类似的代码 
KISS:keep it simple,尽量简单的代码,让代码更容易被别人理解 
YANGNI:you ain't gonna need it,只着眼必需的功能,不添加认为可能需要的功能 
LOD(Law of Demeter):迪米特法则:类应减少被外界直接访问的机会,类与类之间避免直接通信

设计模式

​ 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。大部分设计模式要解决的都是代码的可扩展性问题。(设计模式不是为解决问题而生,而是为如何更好的解决问题而生。它是设计经验的集合。)

经典的设计模式有23种,又可分为三大类:创建型、结构型、行为型

  1. 创建型

    • 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。

    • 不常用的有:原型模式。

  2. 结构型

  • 常用的有:代理模式、桥接模式、装饰者模式、适配器模式。

  • 不常用的有:门面模式、组合模式、享元模式。

  1. 行为型
  • 常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。

  • 不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。

面向对象、设计原则、设计模式、编程规范和代码重构五者的关系

​ 面向对象是武器,设计原则是招式,设计模式是心法。以心法为基础,使用武器运用招式面对复杂的问题。

  • 面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。

  • 设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则”是很多设计模式(策略、模板等)的指导原则。

  • 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。

  • 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。

  • 重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。

posted @   是熙穆吖~  阅读(103)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示