java设计模式——浅显易懂之七大原则
大家好,我是老王。一名正在学java设计模式的大三学生。准备连载java设计模式系列供自己以后复习和大家学习讨论。由于本人是初学者,站的角度更多是它是什么,我们要怎么做的角度进行思考,有出错的地方欢迎各位大牛指正,接下来直接进入正题。
一、引言
为什么要认识七大原则?
我们准备学的23种设计模式就是要遵循7大原则,它对每种设计模式进行约束,增加其扩展性和可维护性。
本文章将从以下两个角度用‘庸俗’的例子进行讲解,尽量做到通俗易懂
- 提出官网说法
- 自己理解
二、分类
1.单一职责原则
2.接口隔离原则
3.依赖倒转原则
4.里氏替换原则
5.开闭原则
6.迪米特法则
7.合成复原原则
三、详细描述
1. 单一职责原则
官方定义:
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
自己理解:
2. 接口隔离原则
官方定义:
1.一个类对另外一个类的依赖性应当是建立在最小的接口上的。
2.不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。自己理解:
什么意思呢,比如说一个接口定义了3个方法:
1.查广东省总人口数()
2.查广东省市级数()
3.查广东省一线城市数()现在我有一个需求,我需要查 广东总人口数和查广东市级数,所以我实现了这个上面这个接口,但是接口中第三个方法:查广东省一线城市数是我不需要的,但是我为了我自己的需求,我必须也对它进行实现。
3. 依赖倒转原则
官方定义:
程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
自己理解:
比如说有个类:laowang,只有一个方法就是goToBeijing,它接收一个参数:Car(汽车对象)。
class Laowang{public void goToBeijing(Car car){System.out.println("老王开着"+car.name+"去北京");} }//这是一个汽车对象类 class Car{public String name="汽车"; } //main方法 public static void main(String[] args) {Laowang laowang = new Laowang();Car car = new Car();laowang.goToBeijing(car); }此时运行结果为:老王开着汽车去北京
class Laowang{public void goToBeijing(Vehicle vehicle){System.out.println("老王开着"+vehicle.name+"去北京");} }//交通工具类 class Vehicle{public String name; } //汽车类 class Car extends Vehicle{public Car(){super.name="汽车";} } //飞机类 class AirPort extends Vehicle{public AirPort(){super.name="飞机";} } //main方法 public static void main(String[] args) {Laowang laowang = new Laowang();Car car = new Car();AirPort airPort=new AirPort();//给老王汽车laowang.goToBeijing(car);//给老王飞机laowang.goToBeijing(airPort); } 运行结果如下:老王开着汽车去北京老王开着飞机去北京
各位看懂了吗?这就是依赖倒置原则。老王去北京不要依赖于汽车这个类,而应该依赖于汽车的接口或抽象类:Vehicle交通工具,这样有利于扩展程序。
4. 里氏替换原则
官方定义:
1.如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。(别看了,你看不懂的,我也看不懂)
2.所有引用基类的地方必须能透明地使用其子类的对象。自己理解:
5.开闭原则(OCP)
官方定义:
1.开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”。
自己理解:
6.迪米特法则
官方定义:
迪米特法(Law of Demeter)又叫作最少知识原则,一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。
自己理解:
一个对象只能与它的直接朋友通信。直接朋友是什么呢?就是在类的成员变量,成员方法参数,返回值中出现的对象,都可以叫做直接朋友。
那有直接朋友,就会有陌生人。举个例子:class Laowang{public void goToBeijing(Vehicle vehicle){System.out.println("老王开着"+vehicle.name+"去北京");Car car = new Car;} }
在这个类中,Vehicle出现在方法参数,那么它就是直接朋友,但是在方法体中,new了一个对象 Car,那么它就属于陌生人,因此要遵守迪米特法则,减少朋友的个数,不要和陌生人说话。
7.合成复原原则
官方定义:
合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
自己理解:
四、结束语
学了java2年了,但是对面对对象的思想还不是很了解,以前只知道有这么个东西,现在学了设计模式,用得多了,才有足够得认识。例如继承,封装,多态,在设计模式中体现得淋漓尽致。接下来每学习一个设计模式,我都会连载一篇自己的理解。等学习完了后,对自己做过过得项目进行重构,坚信自己能坚持下去。
java设计模式——浅显易懂之七大原则相关推荐
- Java设计模式---设计模式概述及七大原则
网课指路:尚硅谷Java设计模式(图解+框架源码剖析)_哔哩哔哩_bilibili 设计模式介绍 1) 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验, 模式不是代码 ...
- 设计模式常用的七大原则总结
设计模式常用的七大原则: 单一职责原则 在方法上(方法很少,逻辑足够简单)或类上遵守单一职责原则都可以. 可以降低类的复杂性 接口隔离原则 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应该 ...
- 设计模式-软件架构设计七大原则及开闭原则详解
前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,Remi酱特别开了这个博客来记录自己 ...
- 大话设计模式之设计模式遵循的七大原则
最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特 ...
- 设计模式-软件设计七大原则
目录 综述 1.开闭原则 1.1开闭原则的定义 1.2开闭原则的作用 1.3开闭原则的实现方法 2.里氏替换原则 2.1里氏替换原则的定义 2.2里氏替换原则的作用 2.3里氏替换原则的实现方法 3. ...
- 设计模式中的七大原则(代码 + 图解)
文中涉及的代码:链接:提取码:tqjq 文章目录 设计模式 1. 目的 2. 分类 3. 原则 3.1单一职责原则 3.2 接口隔离原则 3.3 依赖倒转原则 3.4 里氏替换原则 3.5 开闭原则 ...
- Java设计模式(03) -- 里氏替换原则
六大设计原则 单一职责原则定义:约定一个类应该有且仅有一个改变类的原因: 开闭原则定义:规定软件中的对象.类.模块和函数对扩展应该是开放的,但对于修改是封闭的,核心思想也可以理解为面向抽象编程. 里氏 ...
- java 设计模式:软件设计原则、面向对象理论、23 种设计模式
文章目录 软件设计原则 1.单一职责原则(Single Responsibility Principle) 2.开闭原则(Open Closed Principle) 3.里氏代换原则(Liskov ...
- 设计模式常用的七大原则
1) 单一职责原则 2) 接口隔离原则 3) 依赖倒转原则 4) 里氏替换原则 5) 开闭原则 ocp 6) 迪米特法则 7) 合成复用原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性 ...
最新文章
- arduino nano 蓝牙_用Arduino玩转掌控板(ESP32):ESP32概述与Arduino软件准备
- 查看cpu使用率_腾讯游戏开发工程师:Linux 机器 CPU 毛刺问题排查
- 口红竟超10000款,IT直男谁来拯救?(文末有惊吓)
- 【sprinb-boot】排除/不加载某些Bean
- 从头到脚说单测——谈有效的单元测试
- Vue3之——和Vite不得不说的事
- 10kv开关柜价格_一进三出10KV负荷开关环网柜乌兰察布
- 幻侠修仙服务器维护,幻侠修仙常见问题_幻侠修仙问答_疑难解答_九游手机游戏...
- 2021年,年薪50W,这是产品经理的新出路?(接着发红包)
- NanoDet-Plus的学习笔记
- 仿分词统计的MapReduce 程序。
- 51单片机C语言程序100例
- 应用COMSOL Multiphysics分析水平井压裂裂缝应力干扰现象
- 解决Win10已阻止应用程序访问图形硬件问题(亲测有效)
- 爬虫数据储存—CSV文件
- python3中zip函数_用python实现矩阵转置,python3 中zip()函数
- 计算机硬件系统一直延用,会计电算化计算机硬件系统
- Python淘宝App详情采集接口
- 【MySQL学习笔记】MySQL原理---单表查询
- Google图片和NASA 网站图片的爬虫