Java:7种设计原则简介

设计原则和设计模式

设计原则是一种思想,根据这种思想写代码,方便代码实现高内聚,低耦合,让代码更容易理解,更好的扩展性。而设计模式是一套程序员在开发过程中,遇到相似结构的开发需求,提炼出一套通用的,合理的,合适的模型来实现需求。设计原则是设计模式的核心思想,设计模式是设计原则的一种外在体现。

设计原则

在这里插入图片描述

开闭原则

(1)定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。强调的是用抽象构建框架,用实现扩展细节
(2)优点:提高软件系统的可复用性及可维护性

如果一个类从头到尾都是自己编写的,可以随时随地修改源代码,因为作者知道坑。
如果别人写的,就不能修改别人的代码,符合开闭原则。

优点:增加系统的高复用性和高维护性。
例子:已知图形绘制程序,想要增加绘制三角形,应该增加程序,而不是修改原程序。

依赖倒置原则

(1)定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;而抽象不应该依赖于细节,细节应该依赖于抽象;简单来说,就是要针对接口编程,而不是针对实现编程。
(2)优点:可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险

例子:
人喂养狗,Person feed dog。person是上层,dog是下层,person中有feed dog 方法 。
人喂养猫,Person feed dog。person是上层,dog是下层,person中有feed cat 方法 。
应该新建animal方法,Person feed animal, dog 和 car 实现 animal 中eat的方法。

例子2:
User可能通过发送邮件通知,发送短信通知。应该抽象出一个通知方法,发送邮件,发送短信是实现这个方法的两个类。User不需要知道发送邮件,发送短信的实现,只需要依赖抽象的通知方法。

类和类的关联关系:
(1)依赖:局部变量,虚线箭头
(2)关联:虚线
(3)聚合:空菱形 + 箭头
(4)组合:实菱形 + 箭头
(5)继承:实线箭头

单一职能原则

(1)定义:不要存在多于一个导致类变更的原因。一个类、接口、方法只负责一项职责
(2)优点:降低类的复杂度、提高类的可读性、提高系统的可维护性、降低变更引起的风险。

接口隔离原则

(1)定义:用多个专门的接口,而不是使用单一的总接口,客户端不应该依赖它不需要的接口
(2)注意:
①一个类对应一个类的依赖应该建立再最小的接口上
②建立单一接口,不要建立庞大臃肿的接口
③尽量细化接口,接口中的方法尽量少

迪米特法则

一个对象应该对其他对象保持最少的了解。又叫最少知道原则,尽量降低类与类之间的耦合。
一个对象对其他对象有尽可能少的了解,不和陌生人说话。尽量降低成员的访问权限。

例子:电脑关机需要保存数据,杀死进程,关闭屏幕,断电四个步骤。人关闭电脑,不需要知道四个步骤:
只需要按下关机按钮。如果人有电脑关机的四个方法,很容易操作出问题。所以电脑对外只需要提供一个关机方法,对内私有四个步骤方法。这就是最小知道原则。

里氏替换原则

在子类和父类中,出现了返回类型相同、方法名相同、方法参数相同的方法时,构成方法重写。
方法重写的两个限制:
1.子类重写父类方法时,子类方法的访问修饰符不能比父类的更严格。
2.子类重写父类的方法时候,子类方法不能抛出比父类更多的异常。

例子:父类抛异常,子类不抛异常,代码不用修改。父类不抛异常,子类抛异常,父类替换成子类的时候,需要修改代码。子类兼容父类。
反例:根据里氏替换原则,正方形可能不是长方形,如果长方形有个方法,长方形的宽<=长的时候,宽度加一,长方形可以正常运行,正方形运行这个方法就会报错。
鸟有飞的能力,鸵鸟不具备飞的能力。所以鸵鸟不能作为鸟的子类,不符合里氏替换原则,鸵鸟非鸟。

继承的作用;
1.提高代码的重用性;
2.多态的前提。

两个类不能发生继承的依据:
a.看有没有”is a“关系;
b.在两个类有is a关系之后,还要考虑子类对象替换父类对象之后,业务逻辑是否变化,如发生变化,则不能发生继承关系。

合成复用原则(组合优于继承)

(1)尽量使用对象组合,聚合的方式,而不是使用继承关系达到软件复用的目的
(2)可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少

汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。如果同时考虑这两种分类,其组合就很多。图 1 所示是用继承关系实现的汽车分类的类图。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值