首页 > 其他分享 >设计模式学习1 设计原则

设计模式学习1 设计原则

时间:2023-09-02 22:22:20浏览次数:45  
标签:依赖 原则 子类 耦合度 复用 学习 抽象 设计模式

设计原则

1.开闭原则

对扩展开放,修改关闭。在程序需要扩展的时候,不能去修改原有代码,实现一个热插拔的效果。为了使程序的扩展性好,易于维护和升级

为了达到这样的效果,我们需要使用接口和抽象类

2.里氏代换原则

任何基类可以出现的地方,子类一定可以出现。也就是子类继承父类时,除了添加新的方法完成新增功能外,尽量不要重写父类的方法

3.依赖倒转原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块之间的耦合

4.接口隔离原则

客户端不应该被迫依赖它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上

也就是可以把不同的方法抽象成不同的接口

5.迪米特法则

也叫最少知识原则

如果两个软件实体无需直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用,其目的是降低类之间的耦合度,提高模块的相对独立性

6.合成复用原则

尽量先使用组合或者聚合的关系来实现,其次才考虑继承关系

通常类的复用分为继承复用和合成复用

继承复用缺点:

  • 破坏类的封装性
  • 子类和父类的耦合度高
  • 限制了复用的灵活性

合成复用可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能

合成复用的优点

  • 维持了类的封装性
  • 对象间的耦合度低
  • 复用的灵活度高

标签:依赖,原则,子类,耦合度,复用,学习,抽象,设计模式
From: https://www.cnblogs.com/anewpro-techshare/p/17674293.html

相关文章

  • 魔鬼冲刺学习笔记
    \[\huge{\textbf{魔鬼冲刺}\quad\textbf{2023.8.31-?}}\]高二是大部分OIer的最后一段竞赛时光,这真是“\(One\Last\Olympiad\)”了。所以我们开始魔鬼冲刺了!这里就用来记录这段时期的一些收获,还有学到的知识。由于停课后学习笔记给人的感觉略显凌乱,故在本文中笔者简......
  • 《C和指针》学习笔记
    C和指针学习笔记前置条件1.1配置环境下载vscode安装编译器:这里以MinGw-w64为例。下载MinGw-w64的安装包并解压。添加到系统环境编辑tasks.json(该文件负责项目的编译,如果需要同时编译多个文件,需要对该文件进行如下注释内的修改):{"tasks":[{......
  • 折半搜索 学习笔记
    关于算法折半搜索,又称meetinthemiddle算法。顾名思义,就是将整个搜索的过程分成两个部分分别进行搜索,然后再将两个部分搜索出来的答案进行合并,得到最终的答案。dfs搜索算法一般都是指数级别的,那么我们假如每次dfs时都有两种决策,那么我们执行dfs算法的时间复杂度为\(O......
  • 【学习笔记】二分图基础
    二分图与网络流基础(网络流待学)查看目录目录前置知识:二分图:二分图的定义:二分图的判定:例题:[NOIP2010提高组]关押罪犯二分图的匹配:匈牙利算法:例题:[ABC317G]Rearranging[ABC317G]Rearranging前置知识:tarjan强连通分量:有向图中几个点可以相互到达,就称这几个点是强连通......
  • 莫队学习笔记(如何处理增量)
    题目传送门:序列考虑我们已经求出了区间\([l,r]\)的答案,现在要求\([l,r+1]\)的答案。很明显增多的子序列有\((l,r+1),(l+1,r+1)...(r+1,r+1)\)。考虑求出\([l,r+1]\)中的最小值的位置\(p\)(可以用\(rmq~O(1)\)求出),那么\(a_p\)的贡献就是\(a_p\times(p-l+1)\),现在我......
  • 学习JavaScript的路径
    学习JavaScript的路径可以按照以下步骤进行:了解基本概念:首先学习JavaScript的基本概念,包括变量、数据类型、运算符、数组、对象、循环和条件语句等。可以通过阅读相关的教材、在线课程或者参考W3Schools和MDN文档等来学习。学习控制DOM元素:学习如何使用JavaScript控制DOM元素,包......
  • 学习笔记1-指令级并行
    指令级并行1.概念1.1.指令级并行(ILP)有两种实现方法:(1)依靠硬件来动态发现并实现并行;(2)依靠软件技术在编译时静态发现并行。1.2.数据依赖与冒险数据依赖(三种类型):数据依赖、名称依赖和控制依赖。1.数据依赖:1)指令i生成的结果可能会被指令j用到。2)指令j数据依赖于指令k,......
  • C++语言学习07
    一、类型信息运算符typeid在C++中typeid可以获取数据的类型,但是需要加头文件typeinfofind/usr/include-nametypeinfo1、typeid是运算符,执行运算符函数,执行的返回值类型是type_info类类型对象2、type_info中有个name的成员函数3、type_info中还重载了==运算符,可以直接......
  • tensorrt学习(三)
    继续整理tensorrt的学习资料,方便后续查看.(文章内容大部分摘取于网络资源)1int8量化int8量化就是将网络的权重由float32类型缩放为int8类型,同时记录缩放的scale。为了尽可能的不丢失精度,需要采用标定图片来确定缩放的范围。1.1int8量化原理标定过程标定的原理,是通过输入......
  • tensorrt学习(一)
    整理下tensorrt学习资料,方便后续查找。(文章内容大部分摘取于网络资源)1.tensorrt介绍安装:https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.htmltensorrtpython文档:https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/index.htmltenso......