设计模式之设计原则

单一职责原则 SRP 一个类或者模块只负责完成一种职责 现在微服务还有模块的分层 就是基于这个原则

单一职责,我个人认为单一职责是一个分工合作,对于模块来说做的更精准不需要考虑其他的模块的信息,做到了一个模块小而精,对于整理来说松耦合

里氏替换原则 LSP 多用组合 少用继承

  1. 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。

  2. 子类中可以增加自己特有的方法当子类覆盖或实现父类的方法时,

  3. 方法的前置条件(即方法的形参)要比- 父类方法的输入参数更宽松。(即只能重载不能重写)

  4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

里氏替换原则 是基于子类对父类进行扩展,是对封装和多态的补充。因为封装和继承的要求有些复杂,所以里氏替换原则推荐我们使用组合少用继承

依赖倒置 DIP

  1. 下层模块引入上层模块 改变原来自上而下的依赖方式

  2. 类比假如你是一个演员,没有出名的时候,需要你自己去找合作。你出名以后,合作会自动找你,这种改变就叫做依赖倒置。

  3. 不要面向具体的对象编程 这样会造成较大的耦合。要面向抽象的接口编程

依赖倒置就是说从我去寻找他们变成他们需要我, 对上层模块进行统一管理

接口隔离原则建立单一接口

  1. 接口尽量细化,接口中的方法尽量少

    1. 接口要尽量小
    2. 接口要高内聚
    3. 定制服务
  2. 以人举例,如果你要实现一个人的接口,只需要提供一个基础的人作为接口 然后具体的人添加不同的具体的功能

  3. 比如一个接口下,同时是实现了新增和修改两个接口 这就违反了接口隔离原则

简单说就是一个接口实现一个功能

迪米特法则 最少知识原则 (只是买台咖啡机,竟然要学习咖啡的工作原理)

  1. 只和你的密友对话 感觉外观模式就是基于迪米特法则

  2. 我付完款去下单 我直接调用下单接口就应该可以实现下单功能 不需要了解下单功能里的详情

开闭原则

  1. 类、方法、模块应该对扩展开放 对修改关闭

  2. 添加一个功能应该是在已有的代码基础上进行扩展 而不是修改已有代码

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

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

相关文章

排序(2)——选择排序

三、选择排序 1.简介 选择排序主要采取的排序策略就是选择,在拿到待排序数组后,程序会一遍遍地遍历未排序部分数组,在每一次的遍历过程中会找到最小的元素,并在遍历完成后换到未排序数组部分的最左侧。如此循环往复,每…

Qt QPlainTextEdit高亮显示当前行

Qt QPlainTextEdit高亮显示当前行 文章目录 Qt QPlainTextEdit高亮显示当前行摘要错误的代码正确的代码QTextEdit::ExtraSelection 关键字: Qt、 QPlainTextEdit、 QTextBlock、 ExtraSelection、 GPT 摘要 今天要在说一下GPT,当下如果你还不会用G…

【Python从入门到进阶】48、当当网Scrapy项目实战(一)

接上篇《47、Scrapy Shell的了解与应用》 上一篇我们学习了Scrapy终端命令行工具Scrapy Shell,并了解了它是如何帮助我们更好的调试爬虫程序的。本篇我们将正式开启一个Scrapy爬虫项目的实战,对当当网进行剖析和抓取。 一、当当网介绍 当当网成立于199…

cesium源码解析篇:GeoJsonDataSource(Polygon)

本篇主要内容为 介绍使用GeoJsonDataSource加载GeoJSON数据之后的代码调用和业务逻辑从中提炼对polygon进行解析和创建entity的函数以供参考 读取GeoJSON获取 feature判断是 Polygon or MultiPolygon带 hole创建entity对象 代码调用栈 Cesium.GeoJsonDataSource.load(data,…

【数据结构】二叉搜索树的模拟实现

目录 1、概念 2、模拟实现 2.1、查找 2.2、插入 2.3、删除(难点) 3、性能分析 4、完整代码 1、概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有…

C语言实现基础数据结构——顺序表

目录 顺序表 顺序表和数组 顺序表的分类 静态顺序表 动态顺序表 静态顺序表和动态顺序表的比较 动态顺序表的实现 主要实现功能 顺序表的初始化 顺序表的销毁 顺序表的打印 顺序表的尾部插入 顺序表的头部插入 顺序表的尾部删除 顺序表的头部删除 顺序表的指定…

如何使用docker compose安装APITable并远程访问登录界面

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 …

Java基础常见面试题总结(下)

常见的Exception有哪些? 常见的RuntimeException: ClassCastException //类型转换异常IndexOutOfBoundsException //数组越界异常NullPointerException //空指针ArrayStoreException //数组存储异常NumberFormatException //数字格式化异常ArithmeticE…

Mysql-InnoDB-数据落盘

概念 1 什么是脏页? 对于数据库中页的修改操作,则首先修改在缓冲区中的页,缓冲区中的页与磁盘中的页数据不一致,所以称缓冲区中的页为脏页。 2 脏页什么时候写入磁盘? 脏页以一定的频率将脏页刷新到磁盘上。页从缓冲区…

教你一招,测试人员如何通过AI提高工作效率!

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

C++仿函数、万能头文件、transform学习

这是网上的一个代码,里面的一些东西以前没用过; #include <bits/stdc++.h> using namespace std;// A Functor class increment { private:int num; public:increment(int n) : num(n) { }int operator () (int arr_num) const {return num + arr_num;} };// Driver …

闲聊电脑(2)常见零部件

闲聊电脑(2)常见零部件 夜深人静&#xff0c;万籁俱寂&#xff0c;老郭趴在电脑桌上打盹&#xff0c;桌子上的小黄鸭和桌子旁的冰箱又开始窃窃私语…… 小黄鸭&#xff1a;冰箱大哥&#xff0c;上次你讲了电脑的简史, 这次你给我详细讲讲电脑里面都有啥呗。 冰箱&#xff1a;好…

【破事水】Java Gradle 无法引入同名不同版本的两个包

此问题水于 2024 年 01 月&#xff0c;假如后面 gradle 出了什么好方法能解决这个问题&#xff0c;家祭无忘告乃翁&#xff0c;提前谢过看到这篇的各位大佬了。 结论 先说结论&#xff0c;Java 因为包名定义等原因&#xff0c;对同名包在编译时只能编译一个版本&#xff0c;具…

Kafka高级_生产者ACk机制数据一致性问题

Kafka高级_生产者ACk机制&数据一致性问题 目录需求&#xff1a; 设计思路实现思路分析1.Kafka高级_生产者ACk机制2.Kafka高级数据一致性问题 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c…

微信小程序开发学习笔记《13》WXS脚本

微信小程序开发学习笔记《13》WXS脚本 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读对应官方文档 一、WXS介绍 WXS ( WeiXin Script)是小程序独有的一套脚本语言&#xff0c;结合WXML&#xff0c;可以构建出页面的…

CSDN COC·北京开发者社区2023年度聚会

CSDN COC北京开发者社区2023年度聚会 年末盛会&#xff1a;北京开发者社区2023年度聚会 1. 活动背景&#x1f389;2. 活动议程3. 活动亮点介绍 &#x1f31f;3.1 主理人开场破冰3.2 话题讨论&#xff1a;3.3 城市社区介绍、回顾与展望 &#x1f3d9;️4. 活动留念5.活动总结 博…

浅出深入-机器学习

文章目录 一、K近邻算法1.1 先画一个散列图1.2 使用K最近算法建模拟合数据1.3 进行预测1.4 K最近邻算法处理多元分类问题1.5 K最近邻算法用于回归分析1.6 K最近邻算法项目实战-酒的分类1.6.1 对数据进行分析1.6.2 生成训练数据集和测试数据集1.6.3 使用K最近邻算法对数据进行建…

计算机网络——路由信息协议 (RIP) 实验

1.实验题目 实验五&#xff1a;路由信息协议 (RIP) 实验 2.实验目的 &#xff08;1&#xff09;了解RIP的相关知识以及原理。 &#xff08;2&#xff09;掌握RIP路由的配置方法。 3.实验任务 (1) 路由器的基本配置&#xff1a;设置路由器接口 IP 地址。 (2) 根据以上拓扑…

Python Tornado 实现SSE服务端主动推送方案

一、SSE 服务端消息推送 SSE 是 Server-Sent Events 的简称&#xff0c; 是一种服务器端到客户端(浏览器)的单项消息推送。对应的浏览器端实现 Event Source 接口被制定为HTML5 的一部分。相比于 WebSocket&#xff0c;服务器端和客户端工作量都要小很多、简单很多&#xff0c…

【Spring连载】使用Spring访问 Apache Kafka(二十一)----提示,技巧和例子

【Spring连载】使用Spring访问 Apache Kafka&#xff08;二十一&#xff09;----提示&#xff0c;技巧和例子Tips, Tricks and Examples 一、手动分配所有分区Manually Assigning All Partitions二、Kafka事务与其他事务管理器的例子Examples of Kafka Transactions with Other…