【不就是java设计模式吗】设计模式七大原则,用代码对比方式,化抽象为具体,实打实的教会你

article/2025/10/18 19:11:03
  • 💗作者简介:大家好,我是卷心菜~~,第二季新星计划java领域第十名。
  • 📝个人主页:卷心菜的CSDN博客
  • 📕系列专栏:本文写在Java设计模式专栏:不就是java设计模式吗
  • 📧如果有错误的地方,请指正!
  • 🌻向日葵向阳生长,我也是。

文章目录

  • 前言
  • 一、为什么要学习设计模式?
  • 二、常用的七大原则
  • 三、单一职责原则
    • 1、基本介绍
    • 2、代码对比
    • 3、注意事项和使用细节
  • 四、接口隔离原则
    • 1、基本介绍


前言

自己最近在学习Java的设计模式,本篇讲的是设计模式常用七大设计原则的单一职责原则和接口隔离原则。自己每记录一些知识笔记就会首发在CSDN博客上,能够确保学习完设计模式之后,能够对其有一定程度上的理解和知识记录,形成一个相对不错的知识点框架,来在寒假记录自己学习的点点滴滴。希望大家喜欢💗


一、为什么要学习设计模式?

在编写软件的过程中,设计模式是为了让软件具有更好的以下优点:

  • 代码重用性(相同功能的代码不用多次编写)
  • 可读性(编程规范性,便于其他程序员的阅读和理解)
  • 可扩展性(当需要增加新的功能时,非常的方便)
  • 可靠性(当增加新的功能后,对原来的功能没有影响)
  • 使程序呈现高内聚、低耦合的特性

二、常用的七大原则

  • 单一职责原则
  • 接口隔离原则
  • 依赖倒转原则
  • 里氏替换原则
  • 开闭原则
  • 迪米特法则
  • 合成复用原则

三、单一职责原则

1、基本介绍

对类来说,一个类应该只负责一项职责。如果类A负责两个不同的职责:职责1、职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A分解为A1、A2。

这么说有点抽象,下面用代码来演示一下,化抽象为具体。

2、代码对比

代码一:

public class class01 {public static void main(String[] args) {Vehicle1 vehicle = new Vehicle1();vehicle.run("汽车");vehicle.run("飞机");vehicle.run("轮船");}
}class Vehicle1 {public void run(String vehicle){System.out.println(vehicle + "在高速上行驶");}
}

通过代码一可以看出,这样设计的结果是:飞机和轮船也是在高速上行驶,违反了单一职责原则,这显然是错误的。接下来看看代码二,与其对比一下。

代码二:

public class class02 {public static void main(String[] args) {VehicleRoad road = new VehicleRoad();road.run("汽车");VehicleWater water = new VehicleWater();water.run("轮船");}
}class VehicleRoad {public void run(String vehicle) {System.out.println(vehicle + "在高速上行驶");}
}class VehicleWater {public void run(String vehicle) {System.out.println(vehicle + "在水中行驶");}
}

通过代码二,我们根据交通工具运行方法不同,分解成不同的类,解决了代码一的问题。但是有一个问题就是,这样很浪费资源,改动很大。貌似不太完美,接下来看看代码三

代码三:

public class class03 {public static void main(String[] args) {Vehicle2 vehicle = new Vehicle2();vehicle.runRoad("汽车");vehicle.runWater("轮船");}
}
class Vehicle2{public void runRoad(String vehicle){System.out.println(vehicle + "在高速上行驶");}public void runWater(String vehicle){System.out.println(vehicle + "在水中行驶");}
}

代码三通过修改方法,与代码二比较,对原来的类没有做很大的修改,只是增加方法。这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责原则。

3、注意事项和使用细节

  • 要降低类的复杂度,一个类只负责一项职责
  • 确保提高类的可读性,可维护性
  • 降低变更引起的风险
  • 通常情况下,我们应当遵守单一职责原则,只有逻辑 足够简单,才可以在代码级别违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则

四、接口隔离原则

1、基本介绍

客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。

先看看一张图:
在这里插入图片描述
代码一:

public class class01 {public static void main(String[] args) {A a = new A();a.method1(new B());C c = new C();c.method2(new D());}
}interface Interface1{void opertion1();void opertion2();void opertion3();void opertion4();void opertion5();
}
class B implements Interface1{public void opertion1() {System.out.println("B 实现了 operation1");}public void opertion2() {System.out.println("B 实现了 operation2");}public void opertion3() {System.out.println("B 实现了 operation3");}public void opertion4() {System.out.println("B 实现了 operation4");}public void opertion5() {System.out.println("B 实现了 operation5");}
}class D implements Interface1{public void opertion1() {System.out.println("D 实现了 operation1");}public void opertion2() {System.out.println("D 实现了 operation2");}public void opertion3() {System.out.println("D 实现了 operation3");}public void opertion4() {System.out.println("D 实现了 operation4");}public void opertion5() {System.out.println("D 实现了 operation5");}
}
class A { // A 类 通过接口Interface1 依赖 B类,但只使用1、2、3方法public void method1(Interface1 interface1){interface1.opertion1();}public void method2(Interface1 interface1){interface1.opertion2();}public void method3(Interface1 interface1){interface1.opertion3();}
}
class C { // C 类 通过接口Interface1 依赖 D类,但只使用1、4、5方法public void method1(Interface1 interface1){interface1.opertion1();}public void method2(Interface1 interface1){interface1.opertion4();}public void method3(Interface1 interface1){interface1.opertion5();}
}

代码一中,类A通过接口Interface1 依赖类B,类C通过接口Interface1 依赖类D,因为接口Interface1 对于类A 和类C来说不是最小接口,所以要想实现图片的功能,需要实现接口的所有方法,违反了接口隔离原则! 接下来看看代码二,与其对比一下。

代码二:

public class class02 {public static void main(String[] args) {AA aa = new AA();aa.method1(new BB());CC cc = new CC();cc.method1(new DD());}
}
interface Interface2{void opertion1();
}
interface Interface3{void opertion2();void opertion3();
}
interface Interface4{void opertion4();void opertion5();
}
class BB implements Interface2,Interface3{public void opertion1() {System.out.println("BB 实现了operation1");}public void opertion2() {System.out.println("BB 实现了operation2");}public void opertion3() {System.out.println("BB 实现了operation3");}
}
class DD implements Interface2,Interface4{public void opertion1() {System.out.println("DD 实现了operation1");}public void opertion4() {System.out.println("DD 实现了operation4");}public void opertion5() {System.out.println("DD 实现了operation5");}
}
class AA {public void method1(Interface2 interface2){interface2.opertion1();}public void method2(Interface3 interface3){interface3.opertion2();}public void method3(Interface3 interface3){interface3.opertion3();}
}
class CC {public void method1(Interface2 interface2){interface2.opertion1();}public void method2(Interface4 interface4){interface4.opertion4();}public void method3(Interface4 interface4){interface4.opertion5();}
}

代码二的UML类图:
在这里插入图片描述

代码二采用了接口隔离原则。根据实际情况,把代码一中的接口Interface1拆分成三个接口,即最小接口。这样就完美的去除了类BB和类DD不用实现他们不需要的方法


http://chatgpt.dhexx.cn/article/i12BCVwS.shtml

相关文章

Java岗:实打实掌握[Java多线程]和[并发编程]

概述 面试中,多线程和并发编程已经是必不可少的了,我经常看到此类问题,当时也简单了解过,什么继承Thread类,实现Runnable接口,这些都被说烂了,知道这些当然是远远不够的,于是这几天…

我用Java能干什么?

Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,…

什么是JAVA?JAVA能做什么?

什么是Java? Java既是一种编程语言,又是一个平台。 Java程序语言 Java是具有以下特征的高级程序语言: 简单   面向对象   可分布   可解释   强壮   安全性   结构化   轻便   功能强大   多线程   动态 Java既可以被编译…

Java是什么?主要是干什么的?

随着Java技术不断发展,许多人都想问:Java是什么?主要是干什么的呀?现在小朗来为大家解惑。java是一种高级计算机语言,一种可以编写跨平台应用软件、完全面向对象的程序设计语言。那Java主要是干嘛的呀? 一、java可以做…

学java可以从事什么工作-java岗位有哪些?

学java可以从事的工作主要有:企业级应用开发、网站开发、软件开发、嵌入式领域、大数据、科学应用等。java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。 1、企业级应用开发 企业级应用开发大可以做全国联网的系统,小到中小企…

Java到底能做什么事情呢?

相信很多小伙伴看到标题第一个出现在脑海里的想法是赚钱,难道你们只知道java薪资高?那么你太low,Java的应用领域很广,可以说是现在最普及的,遍布各行各业,可见其优势所在。 1、大数据领域 Hadoop以及其他大数据处理技术普遍用的都是Java,当然其他语言也有用到,基于Jav…

Java编程到底能干什么,可以从事哪些岗位?

听说程序员工资很高,想学Java语言,但不知道它到底能做什么?” 如果你是一个Java初学者,你可能对Java应用在什么地方感到困惑。除了“马里奥”“贪吃蛇”等经典游戏,其他领域好像也找不到Java的踪迹,那么Jav…

Java是用来干什么的?

Java是用来干什么的?这个问题首先我们得知道这个“Java”是个什么东西? Java是什么 有问题“百度一下,你就知道”,输入“Java”关键词,我们会看见“百度百科”对Java较官方的解释,看就是下图: …

Java是什么?Java能干嘛?

我刚开始学习Java的时候,很长一段时间都有这么个疑惑? Java到底是啥?它能干什么? 自己也看过不少的课程和书,大部分都是从Java的发展史开始讲,总之就是那些什么Java历史悠久,Java很优秀&#x…

Java能做什么?学完Java可以从事什么工作呢?

如果你是一个Java初学者,你可能对Java应用在什么地方感到困惑。除了“马里奥”“贪吃蛇”等经典游戏,其他领域好像也找不到Java的踪迹,那么Java究竟能做什么?学完Java可以从事什么工作呢?本文,小千就来详细…

什么是JAVA?JAVA能用来干什么?

我刚开始学习Java的时候,很长一段时间都有这么个疑惑? Java到底是啥?它能干什么? 自己也看过不少的课程和书,大部分都是从Java的发展史开始讲,总之就是那些什么Java历史悠久,Java很优秀&#x…

Java具体可以做什么?

Java具体可以做什么?一起来看看吧。 1、Java可以用来做网站 Java可以用来做网站,很多大型网站都是用JSP写的,JSP全名JavaServerPages。这是一种动态网页技术,比如我们熟悉的B站,很多政府网站都是用这个写的所以想学习…

Java到底能干什么?有哪些实际用途?

Java 是一种跨平台的、面向对象的高级编程语言,主要用来进行网站后台开发和 Android APP 开发。Java 是全球最受欢迎的编程语言之一,在世界编程语言排行榜 TIOBE 中,Java 一直霸占着前三名,有好多年甚至都是第一名。 JetBrains 每…

Java是什么?Java到底能干嘛?

我刚开始学习Java的时候,很长一段时间都有这么个疑惑? Java到底是啥?它能干什么? 自己也看过不少的课程和书,大部分都是从Java的发展史开始讲,总之就是那些什么Java历史悠久,Java很优秀&#xf…

学习java技术能干什么工作

Java岗位的工作有: Java工程师的职位包括:手机软件开发,游戏开发,网站开发、技术支持、项目经理、产品销售、架构师、系统分析等。 真正的JaVa工程师应具备adit,即analysis(分析问题的能力)、规划设计解决问题方案的…

学习Java开发可以就业哪些岗位和领域?

学好Java,能达到职业能力,有7大就业方向可以选择: 1、企业级应用开发 企业级应用开发大可以做全国联网的系统,小到中小企业的应用解决方案。多数没有前端开发的通 常是从一个服务器接收数据,处理后发给另一个处理系统。 如今,Java编程已经在…

Python 矩阵基本运算【numpy】

文章目录 一、实验说明二、Python 矩阵基本运算1. python矩阵操作2. python矩阵乘法3. python矩阵转置4. python求方阵的迹5. python方阵的行列式计算方法6. python求逆矩阵/伴随矩阵7. python解多元一次方程 一、实验说明 实验环境 Anaconda python3.6 jupyter 二、Python 矩…

机器学习之python矩阵运算

python矩阵基本运算 一、python矩阵操作二、python矩阵乘法三、python矩阵转置四、python求方阵的迹五、python方阵的行列式计算方法六、python求逆矩阵/伴随矩阵七、python解多元一次方程 一、python矩阵操作 1、引入numpy简写为np 2、使用mat函数创建一个2*3的矩阵 3、使用s…

python矩阵乘法运算

一、矩阵乘法 矩阵乘法为 AB 或 np.dot(A,B) ,若为对应元素相乘则用 A*B 或 np.multiply(A,B) 。 1. AB 和 np.dot(A,B) A np.array([[1,2],[3,4] ])B np.array([[1,2],[3,4] ])C1 A B C2 np.dot(A,B) print(C1) print(---------) print(C2)输出为 [[ 7 10…

Python矩阵基本运算

文章目录 一、python矩阵操作二、python 矩阵乘法三、python 矩阵转置四、python 求方阵的迹五、python 方阵的行列式计算方法六、python 求逆矩阵 / 伴随矩阵七、python 解多元一次方程 一、python矩阵操作 引入numpy, 使用mat函数创建一个2X3矩阵 #引入numpy im…