软件设计七大原则 (带 * 号为重要,里氏原则和契约原则暂省略)
- 1. 开闭原则*
- 2. 依赖倒置原则*
- 3. 单一职责原则
- 4. 接口隔离原则
- 5. 迪米特原则
对设计原则不能无脑全部遵守要根据实际业务场景来进行设计
1.开闭原则简介*
- 开闭原则定义: 一个软实体如 类, 模块和函数应该对扩展开放, 对修改关闭
- 开闭原则slogan:用抽象构建框架,用实现扩展细节
- 优点: 提高软件系统的可复用性及可维护性
1.1 举个栗子: 开闭原则在日常开发中的应用
比如 JavaWeb 开发中大名鼎鼎 ORM框架 的 Mybatis就用到了开闭原则, 在和数据库打交道的过程中会有些固定的逻辑, 比如 分页查询,数据库方言 等, 这些代码会在我们的软件系统里出现多次 , 让开发者不厌其烦 , 而 Mybatis 提供了 ExamplePlugin 拦截器让 开发者在Mybatis根据XML生成SQL 语句后 , 对指定的SQL语句进行二次修改 , 我们可在拦截器中统一处理固定逻辑 , 减少了我们代码量, 用实际行动诠释了 用抽象构建框架,用实现扩展细节
2. 依赖倒置原则简介
- 依赖倒置原则定义:
+ 高层模块不应该依赖最低层模块, 二者都应该依赖其抽象
+ 抽象不应该依赖细节,细节应该依赖抽象
+ 针对接口编程, 不针对实现编程
- 开闭原则slogan:以抽象为基础搭建的架构比以细节搭建的架构稳定的多 !
- 优点: 可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性, 可降低修改程序造成的风险
2.1 举个栗子: 依赖倒置原则在日常开发中的应用
比如 JavaWeb 开发中大名鼎鼎 Spring框架 的 IOC, 就基于依赖倒置原则。
3. 单一职责原则简介
- 单一职责原则 定义:
+ 不要存在多于一个导致类变更的原因
- 开闭原则slogan:一个类/接口/方法只负责一项职责 !
- 优点: 降低类的复杂度, 提高类的可读性, 提高系统的可维护性, 降低变更引起的风险
3.1 举个栗子: 单一职责原则在日常开发中的应用
如果对单一原则的使用场景控制不得当可能会导致方法爆炸. 一般在 编写接口和方法时必须使用单一原则 , 类则分情况而定
4. 接口隔离原则简介
- 4.1 接口隔离原则 定义:
+ 用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口。
+ 一个类对一个类的依赖应该建立在最小的接口上 建立单一接口, 不要建立庞大臃肿的接口。
+ 尽量细化接口,接口中的方法尽量少!
- 接口隔离slogan:注意适度原则,一定要适度,多做前期策划工作,确保高内聚低耦合!
- 优点: 符合我们常说的高内聚低耦合的设计思想, 从而使得类具有很好的可读性,可扩展性和可维护性
4.1 举个栗子: 接口隔离原则在日常开发中的应用
servlet 2. 中 提供了一系列的 listener监听器接口,遵守了接口隔离原则来监听不同的资源变化!*
javax.servlet包下
ServletContextListener
:
实现该接口,重写contextInitialized
与contextDestroyed
方法可以让实现类的方法在Web容器启动与关闭时被调用,可以用来初始化Web 资源, 注销服务 等~
ServletRequestListener
:
实现该接口,重写requestDestroyed
与requestInitialized
方法可以让实现类的方法在接收http请求时可用于请求参数编码转义,统计网站请求次数等~
HttpSessionListener
实现该接口,重写sessionCreated
与sessionDestroyed
方法可以让实现类的方法Session创建和销毁时被调用可以统计Session的使用情况~
javax.servlet.http包下
HttpSessionBindingListener
实现该接口,重写valueBound
与valueUnbound
方法可以让实现类的方法一对一的Session绑定和去取消绑定,比如用户在平台上有三种状态,在线,离线,隐身, 当用户需要隐身时,我们就可以使用HttpSessionListener在将其从在线Session列表里放到隐身Session列表~
HttpSessionActivationListener
实现该接口,重写sessionWillPassivate
与sessionDidActivate
方法可以让实现类的方法在session对象序列化(钝化)前和反序列化(活化)后都会被执行
我们在自定义servlet监听器时可以根据业务场景,实现不同的Listener,servlet 2. 遵守了接口隔离插件*
5. 迪米特原则简介
- 5.1 迪米特原则 定义:
一个对象应该对其他对象保持最小的了解,也叫最少知道原则.- 接口隔离slogan:出现在成员变量,方法的输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类.
- 优点: 降低类之间的耦合