设计模式原则及分类

一、概念

设计模式:(Design pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。

二、设计模式原则:

  • 单一职责原则(Single Responsibility Principle):一个类应该只有一个发生变化的原因。每个类的功能尽可能的单一,只干一件事情,如果承担的职责太多就需要将类进行拆分。

  • 开闭原则(Open Closed Principle):对扩展开放,对修改关闭。为了使程序的扩展性好,易于维护和升级,在扩展的时候,尽量不要修改原代码,而是要了扩展原代码,比如接口实现。

  • 里氏替换原则(Liskov Substitution Principle):任何基类可以出现的地方,子类一定可以出现。个人理解是基类使用的地方可以用子类替换掉,且不会影响功能。因此该原则还要求:子类对父类的方法尽量不要重写和重载,如果给重写了,运行的时候就破坏了替换原则。

  • 接口隔离原则(Interface Segregation Principle):客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

  • 依赖倒置原则(Dependence Inversion Principle):上层模块不应该依赖底层模块,它们都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。

上层的意思就是依赖方,例如一个人出远门需要依赖交通工具;
下层就是被依赖方,如交通工具。交通工具包括大巴、火车、飞机、高铁等。
此时如果上层直接依赖底层实体工具,以后新添加一个出行工具就要动上层依赖方代码,此时我们可以给所有下层的交通工具抽象出一个接口vehicl,上层依赖vehicl接口,这样底层代码扩展不会影响上层代码功能。
image.png

  • 迪米特法则(最少知道原则)(Law of Demeter):只与你的直接朋友交谈,不跟“陌生人”说话。一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。

记忆要点:SOLID(坚固的),分别是上面前5个单词的首字母。

三、设计模式分类:

  • 创建型模式:创建型设计模式主要解决“对象的创建”问题,共五种:

工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

记忆方法:工厂里有个孤单建造者在建圆形大楼。

  • 结构型模式:结构型设计模式主要解决“类或对象的组合或组装”问题,共七种:

适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

记忆方法:代理人觉得这座外观不好看,需要再装饰下,可以加一组圆圆的桥洞,再上几个桥墩。

  • 行为型模式:行为型设计模式主要解决的就是“类或对象之间的交互”问题,共十一种:

策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

参考文章:
快速记忆23种设计模式
对“依赖倒置原则”的理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/81772.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Linux从练气到飞升》No.17 进程创建

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

ROS2 学习(五)接口,动作

接口 通信双方统一规定好接口。比如图像 img,控制运动的线速度和角速度…… 我们也不用了解具体实现,基本就是了解接口会去用就行。 $ ros2 interface list # 展示所有 interfaces $ ros2 interface show ... # 显示具体一个 interface $ ros2 package…

IBM Spectrum LSF License Scheduler

LSF License Scheduler 提供了两个版本: Basic Edition 和 Standard Edition。 LSF License Scheduler Basic Edition 随附于 LSF Standard Edition 和 Advanced Edition ,并非旨在应用有关如何在集群或项目之间共享许可证的策略。 相反, LSF License S…

Mr. Cappuccino的第64杯咖啡——Spring循环依赖问题

Spring循环依赖问题 什么是循环依赖问题示例项目结构项目代码运行结果 Async注解导致的问题使用Lazy注解解决Async注解导致的问题开启Aop使用代理对象示例项目结构项目代码运行结果 Spring是如何解决循环依赖问题的原理源码解读 什么情况下Spring无法解决循环依赖问题 什么是循…

生成式人工智能的潜在有害影响与未来之路(三)

产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域,旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害:设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…

Windows用户如何安装Cpolar

目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…

Unity - MenuItem特性

MenuItem(string itemName, bool isValidateFunction, int priority) 参数1:菜单名 参数2:是否使用自定义条件控制菜单项是否可点击,默认为false,一般不赋值,需要用的话需要定义两个MenuItem MenuItem 1 : 自定义条件…

Spring Cloud Alibaba-Sentinel--服务容错

1 高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络 原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出…

EMC三大法宝之一:屏蔽

结论:解决EMC的三大法宝为:屏蔽、接地和滤波。 Part 1 屏蔽的原理 首先,我们要了解屏蔽的概念。 屏蔽就是用金属对两个空间区域进行隔离, 用以控制一个空间区域的电场、 磁场和电磁波对另一个空间区域的影响,通常的…

阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用

推荐算法与系统在全球范围内已得到广泛应用,为用户提供了更个性化和智能化的产品推荐体验。在推荐系统领域,AI建模中特征数据的复用、一致性等问题严重影响了建模效率。阿里云机器学习平台 PAI 推出特征平台(PAI-FeatureStore) 。…

Crontab定时任务运行Docker容器(Ubuntu 20)

对于一些离线预测任务,或者D1天的预测任务,可以简单地采用Crontab做定时调用项目代码运行项目 Crontab简介: Linux crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令&…

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…