[GN] 设计模式——面向对象设计原则概述

文章目录

  • 面向对象设计原则概述
    • 单一职责原则
    • 开闭原则
    • 里氏代换原则
    • 依赖倒转原则
    • 接口隔离原则
    • 合成复用原则
    • 迪米特法则
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

面向对象设计原则概述

在这里插入图片描述

单一职责原则

一个类只负责一个功能领域中的相应职责

类承担的职责越多,它被复用的可能性就越小
而且一个类承担的职责过多,就相当于将这些职责耦合在一起

开闭原则

一个软件实体应当对扩展开放,对修改关闭。即实体应尽量在不修改原有代码的情况下进行扩展。

里氏代换原则

所有引用基类(父类)的地方必须能透明地使用其子类的对象。
运用里氏代换原则时

  • 应该将父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法。
  • 程序运行时,子类实例替换父类实例,可以很方便地扩展系统的功能,无须修改原有子类的代码
  • 增加新的功能可以通过增加一个新的子类来实现。

依赖倒转原则

要针对接口编程,而不是针对实现编程。

在实现依赖倒转原则时

  • 需要针对抽象层编程
  • 具体类的对象通过依赖注入的方式 注入其他对象

其中接口注入是指通过实现在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。
例:
在这里插入图片描述

CustomerDAO 内调用TXT 和 Excel。需要手动更改代码

在这里插入图片描述

引入抽象层 只需要在CustomerDAO调用抽象类 并在配置文件xml定义调用TXT还是Excel

接口隔离原则

使用多个专门的接扣,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
即明确角色的业务 该接口方法仅服务该角色,不可多不必要的方法。

合成复用原则

尽量使用对象组合,而不是继承来达到复用的目的。

复用已有的设计

  • 首先应该考虑使用组合 / 聚合,组合 / 聚合可以使系统更加灵活,降低类与类之间的耦合度
  • 其次才考虑继承,在使用谜承时,需要严格遵循里氏代换原则,滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。

因为继承时候,基类会暴露在子类下。

在这里插入图片描述

如上 CustomerDAO 继承了 DBUtil.
现需要更换数据库连接方式为 Oracle数据库
这样需要修改CustomerDAO 或者 DBUtil 违反了开闭原则

在这里插入图片描述

如上CustomerDAO 与 DBUtil是关联关系
采用依赖注入方式将DBUtil注入CustomerDAO
Oracle采用继承扩展DBUtil类。 根据里氏替换原则 DBUtil子类对象可以覆盖DBUtil对象

迪米特法则

软件实体应当尽可能少地与其他实体发生相互作用。

总结

本篇知识设计模式开篇基础知识。后面将会补充我学习过程中的设计模式

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

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

相关文章

蓝桥杯---加法变乘法

我们都知道:123 ….. 491225,现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:123 ... 10*1112 ... 27*2829 ... 492015 就是符合要求的答案. 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是 提交10)…

动手学深度学习(一)深度学习介绍1

目录 一、引言 1.日常生活中的机器学习: 2.机器学习中的关键组件: 2.1 数据: 2.2 模型: 2.3 目标函数: 2.4 优化算法: 3. 各种机器学习问题: 3.1 监督学习: 3.1.1 回归&…

MGRE实验报告二

实验要求: 实验预览图: 实验分析: 1、对R1-R5配置IP地址,同时R1-R5每个路由器各有一个环回 2.1、对R1、R3、R4路由器开启虚拟接口1,分别配置隧道IP、接口封装协议,接口类型、定义封装源、开启伪广播功能&…

cetos7.9 install kubeadmin

第 1 步:禁用 SELinux(可选但推荐) 如何在 CentOS 7 上查找 SELinux 状态 sestatus另一种选择是运行以下 cat 命令: vi /etc/selinux/config SELINUXdisabled rebootcentos7 linux 安装k8s前下面操作的作用是? cat…

JAVA双列集合Map的特点

一次存一对元素,分别是 键 和 值,他们是一 一对应的:其中:键不可以重复,值可以重复这一对数据叫键值对、键值对对象、或 Entry Map 的体系结构: Map的常见API: 方式的实现:注意 Map …

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…

第 6 章:Linux中使用时钟、计时器和信号

在本章中,我们将开始探索Linux环境中可用的各种计时器。随后,我们将深入了解时钟的重要性,并探讨UNIX时间的概念。接下来,我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后,我们将进入std::chrono的领域&…

数据结构与算法-二叉树-二叉树的所有路径

二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","…

计算机毕业设计 | vue+springboot 超市账单管理系统(附源码)

1,绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约,外国人迈克尔库伦开设了第一家合作商店,为了更好地吸引大量客流量,迈克尔库伦精心设计了低价策略,通过大量进货把商品价格压低,通过商店一次性集…

HCIA---OSPF实验

题目: 一:IP规划及配置 IP规划没有要求,所以我们可以去任意规划,只要每个网段不要重复就好 规划的IP 配置IP 先在每个ABR设备上配置环回和接口IP,然后每台设备上使用display ip interface brief都查看一下 R1: R3&…

测试ASP.NET Core项目调用EasyCaching的基本用法(InMemory)

EasyCaching属于开源缓存库,支持基本缓存方式及高级缓存用法,提高用户操作缓存的效率。EasyCaching支持的缓存方式包括以下类型,本文学习最基础的InMemory方式的基本用法。   EasyCaching.InMemory包属于基于内存的缓存库,使用的…

最后50个CC龙年红包封面,免费速领!还有更多......高中生也卷起Steam来了

微信视频号之前是送了我3张新年红包封面,一共是150个,但不太会操作浪费了100个,只能我自己用来送老铁了。 晓衡又做了一条 Cocos 小可爱 CC 封面红包,特别适合送女生或给小朋友们,点击视频领取!还好微信又送…

Docker 搭建MySQL主从复制-读写分离

一. 介绍 MySQL主从复制是一种常用的数据库高可用性解决方案,通过在主数据库上记录的数据变更,同步到一个或多个从数据库,实现数据的冗余备份和读写分离。在Docker环境下搭建MySQL主从复制和读写分离,不仅方便管理,还…

管理类联考-复试-英语口试

文章目录 主要内容注意事项常用短语常见话题模版在职生模板一在职生模板二 模板Sample lSample 2Sample 3Sample 4Sample 5Sample 6Sample 7Sample 8-简介版自我介绍 主要内容 1、简单问候 向老师们致以简单的问候,调整状态。 2、个人信息 姓名、年龄、毕业院校、…

为什么要用云手机养tiktok账号

在拓展海外电商市场的过程中,许多用户选择采用tiktok短视频平台引流的策略,以提升在电商平台上的流量,吸引更多消费者。而要进行tiktok引流,养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式&#xff0…

【Docker】WSL(Windows Subsystem for Linux)常见命令解释说明以及简单使用

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

【Spring实战】32 Spring Boot3 集成 Nacos 服务注册中心 并在 Gateway 网关中应用

文章目录 1. 定义2. 背景3. 功能和特性4. 下载安装5. 服务启动6. 使用示例1)服务提供者2)服务消费者3)测试 7. 代码参考结语 1. 定义 Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用…

Git怎样用?(下载到本地,和在本地初始化)

全局设置: 点击第二个 输入: 例如;邮箱是随意地 git config --global user.name "名字" git config --global user.email "邮箱" 获取git仓库 本地初始化: 创建仓库 右键第二个 输入 git init 克隆&#…

prism 10 for Mac v10.1.1.270激活版 医学绘图分析软件

GraphPad Prism 10 for Mac是一款专为科研工作者和数据分析师设计的绘图和数据可视化软件。以下是该软件的一些主要功能: 软件下载:prism 10 for Mac v10.1.1.270激活版 数据整理和导入:GraphPad Prism 10支持从多种数据源导入数据&#xff0…

HarmonyOS模拟器启动失败,电脑蓝屏解决办法

1、在Tool->Device Manager管理界面中,通过Wipe User Data清理模拟器用户数据,然后重启模拟器;如果该方法无效,需要Delete删除已创建的Local Emulater。 2、在Tool->SDK Manager管理界面的PlatForm选项卡中,取消…