设计规则之开闭原则

news/2024/11/18 4:33:45/

tip: 需要《设计模式之禅》的书籍,可以联系我

作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

相关规则:

1.6大设计规则-迪米特法则
2.6大设计原则-里氏替换原则
3.6大设计规则-接口隔离原则
4.6大设计规则-单一职责原则
5.6大设计规则-依赖倒置原则

文章目录

  • 开闭原则
    • 一、关于开闭原则的一个小例子
    • 二、为什么要使用开闭原则

开闭原则

《设计模式之禅》第6章介绍关于开闭原则,总结十字真言:对扩展开放,对修改关闭
从Java的面向对象上看就是继承、封装,也就是说在我们实现需求时,尤其在架构设计时,我们写的一些基础对象,不允许其他人修改,但是如果你要基于我这个类扩展我们是提供了渠道的。

一、关于开闭原则的一个小例子

接下来我举一个例子说明:

例如我要封装一个持久层的Mapper类给大家用,提供基础的增、删、改、查、批量等功能

我下面是一个基础接口 Mapper,提供增删改查以及批量的一些接口,并且我基于 Mapper 提供了一个默认实现 AiocloudMapper,其他人是不能修改我的默认实现,但是我提供的 Mapper 接口可以提供大家实现去扩展,你可以扩展一个新的 MyMapper 去实现 Mapper,对增删改查赋予自己的逻辑,这就是开闭原则。

package com.pany.camp.design.principle.openclose;import java.util.List;/**** @description:  基础 Mapper 类* @copyright: @Copyright (c) 2022 * @company: Aiocloud* @author: panyong * @version: 1.0.0 * @createTime: 2023-05-30 20:29*/
public interface Mapper<T> {T select();T select(Object... params);List<T> selects();int save(T t);int batchSave(List<T> ts);int update(T t);int batchUpdate(List<T> ts);int delete(Object param);int deleteAll();
}
package com.pany.camp.design.principle.openclose;import java.util.List;/**** @description:  默认实现* @copyright: @Copyright (c) 2022 * @company: Aiocloud* @author: panyong * @version: 1.0.0 * @createTime: 2023-05-30 20:36*/
public class AiocloudMapper<T> implements Mapper<T> {@Overridepublic T select() {return null;}@Overridepublic T select(Object... params) {return null;}@Overridepublic List<T> selects() {return null;}@Overridepublic int save(T t) {return 0;}@Overridepublic int batchSave(List<T> ts) {return 0;}@Overridepublic int update(T t) {return 0;}@Overridepublic int batchUpdate(List<T> ts) {return 0;}@Overridepublic int delete(Object param) {return 0;}@Overridepublic int deleteAll() {return 0;}
}
package com.pany.camp.design.principle.openclose;import java.util.List;/**** @description:  自定义实现* @copyright: @Copyright (c) 2022* @company: Aiocloud* @author: panyong* @version: 1.0.0* @createTime: 2023-05-30 20:38*/
public class MyMapper<T> implements Mapper<T> {@Overridepublic T select() {return null;}@Overridepublic T select(Object... params) {return null;}@Overridepublic List<T> selects() {return null;}@Overridepublic int save(T t) {return 0;}@Overridepublic int batchSave(List<T> ts) {return 0;}@Overridepublic int update(T t) {return 0;}@Overridepublic int batchUpdate(List<T> ts) {return 0;}@Overridepublic int delete(Object param) {return 0;}@Overridepublic int deleteAll() {return 0;}
}

二、为什么要使用开闭原则

上面的例子是偏向于实操的,但是接下的这个问题**“为什么要使用开闭原则”更偏向于面试中或者你去将开闭原则陈述给别人。首先开闭原则本质就是抽象**,记住它的本质,你写代码的时候就知道如何运用它了。那么抽象的好处有什么呢?理解了这个面试时你就可以回答自如了。

1、提高复用性
在生产过程中,我们会将具有一类特点的对象进行抽象,其实也可以理解成类似于组件化,例如:A类需要实现查询方法,B类需要实现查询方法,那么如果两个地方都去写,那不是代码利用率非常低,冗余程度相当高,通过面向对象的思想,我们将查询方法抽象成 Mapper 接口的一个抽象方法。在实现一个这个接口 BaseMapper 提供一种查询实现。这样AB类只需要调用BaseMapper.select(params) 是不是就可以了。随着调用越来越多这种好处越来越明显。

2、提升可维护性
这个更好理解了,接着上面的例子,如果AB里面都写了 select() 方法,那么如果我要修改它,是不是需要改两遍,AB里面都要改,这样维护成本就变成两倍了。随着这种现象越来越多,维护越来越麻烦,万一哪天领导跟你说让你加个东西,你要复制 n 份,想想都会头疼。

总结下,使用开闭的好处就是:面向对象,提供复用性,提升可维护性

tip:老板就喜欢你这样给他节省成本的程序员 :)


http://www.ppmy.cn/news/178491.html

相关文章

浮点数在内存中的储存(C语言)

浮点数在内存中的储存 一、浮点数简介二、浮点数在内存中的储存1.IEEE 754标准2.单精度浮点数的内存储存3.双精度浮点数的内存储存4.IEEE 754对有效数字M和指数E&#xff0c;还有一些特别规定 三、总结 一、浮点数简介 浮点数是计算机科学中的一种数据类型&#xff0c;用于存储…

首款MeeGo系统上网本 华硕Eee PcX101H独家首测(6)

点击菜单中的“媒体”就可以进入到媒体播放界面&#xff0c;进入后我们发现其风格比较清新&#xff0c;各区域的属性也非常明了&#xff0c;上手几乎不需要难度。 播放界面   媒体播放主要分为音乐、视频和广播。和目前许多主流播放软件相同&#xff0c;MeeGo提供的播放器界面…

华硕eeepc 1201N 开启AHCI

首先&#xff0c;在win7下修改注册表&#xff1a; 1. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\IastorV In the right pane, right-click Start in the Name column, and then click Modify. In t…

华硕笔记本计算机名称,华硕笔记本电脑型号命名规则详解.doc

华硕笔记本电脑型号命名规则详解 华硕笔记本电脑型号命名规则详解在所有笔记本品牌中&#xff0c;华硕的型号命名方式可能是最冗长、而且最难于记忆的&#xff0c;但与此同时&#xff0c;它也是最有参考价值的&#xff0c;因为每个型号都会对应一款固定配置的机型。有些品牌的笔…

总结下和提供下eee pc 1000h 用u盘或者移动硬盘安装windows xp的方法

总结下和提供下eee pc 1000h 用u盘或者移动硬盘安装windows xp的方法&#xff1a; 1.找一个能上网的电脑&#xff0c;拷贝一个windows xp安装文件到u盘或者移动硬盘 2.下载我做好的系统文件并且解压&#xff0c;这些文件都要放到U盘或者移动硬盘的根目录下 分卷压缩的可以从西面…

华硕Padfone和基于MeeGo的Eee PC提供了更多选择

在台北电脑展上&#xff0c;各大公司相继宣布即将发布新品&#xff0c;包括一系列平板电脑。有很多互相构成竞争的新品&#xff0c;不过有两款来自华硕的产品&#xff0d;我最喜欢的硬件制造商&#xff0d;特别打动了我。 首先&#xff0c;当然就是那款众所期待的Padfone。它将…

Intel改造Eee PC Linux系统实现闪电启动

NetBook超便携上网本的出现模糊了PC与数码设备之间的界限&#xff0c;但PC操作系统冗长的启动时间仍然是一个瓶颈。上周的一次Linux会议上&#xff0c;两位Intel公司Linux系统工程师展示了他们的改造成果&#xff0c;在一台华硕Eee PC上只消5秒即可启动Fedora操作系统。  实际…

在华硕Asus EEE PC上安装OpenSolaris2008.05

华硕eee pc是一款最近非常火的超便携袖珍笔记本电脑。它的主要特点就是小&#xff0c;目前有7寸和9寸两种规格。配置相对于目前主流笔记本电脑相对较低。默认采用Linux操作系统。但由于它的超便携&#xff08;仅有不到1kg&#xff09;&#xff0c;在市场上非常火爆。 默 认的L…