[钻研Java设计模式:不断完善中]

软件设计七大原则 (带 * 号为重要,里氏原则和契约原则暂省略)

  • 1. 开闭原则*
  • 2. 依赖倒置原则*
  • 3. 单一职责原则
  • 4. 接口隔离原则
  • 5. 迪米特原则

对设计原则不能无脑全部遵守要根据实际业务场景来进行设计

1.开闭原则简介*

  • 开闭原则定义: 一个软实体如 类, 模块和函数应该对扩展开放, 对修改关闭

  • 开闭原则slogan:用抽象构建框架,用实现扩展细节 
  • 优点: 提高软件系统的可复用性及可维护性

1.1 举个栗子: 开闭原则在日常开发中的应用

比如 JavaWeb 开发中大名鼎鼎 ORM框架Mybatis就用到了开闭原则, 在和数据库打交道的过程中会有些固定的逻辑, 比如 分页查询,数据库方言 等, 这些代码会在我们的软件系统里出现多次 , 让开发者不厌其烦 , 而 Mybatis 提供了 ExamplePlugin 拦截器让 开发者在Mybatis根据XML生成SQL 语句后 , 对指定的SQL语句进行二次修改 , 我们可在拦截器中统一处理固定逻辑 , 减少了我们代码量, 用实际行动诠释了 用抽象构建框架,用实现扩展细节

代码Demo

2. 依赖倒置原则简介

  • 依赖倒置原则定义:
    + 高层模块不应该依赖最低层模块, 二者都应该依赖其抽象
    + 抽象不应该依赖细节,细节应该依赖抽象
    + 针对接口编程, 不针对实现编程

  • 开闭原则slogan:以抽象为基础搭建的架构比以细节搭建的架构稳定的多 ! 

  • 优点: 可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性, 可降低修改程序造成的风险

2.1 举个栗子: 依赖倒置原则在日常开发中的应用

比如 JavaWeb 开发中大名鼎鼎 Spring框架IOC, 就基于依赖倒置原则。

代码Demo

3. 单一职责原则简介

  • 单一职责原则 定义:
    + 不要存在多于一个导致类变更的原因

  • 开闭原则slogan一个类/接口/方法只负责一项职责 ! 

  • 优点: 降低类的复杂度, 提高类的可读性, 提高系统的可维护性, 降低变更引起的风险

3.1 举个栗子: 单一职责原则在日常开发中的应用

如果对单一原则的使用场景控制不得当可能会导致方法爆炸. 一般在 编写接口和方法时必须使用单一原则 , 类则分情况而定

此处输入图片的描述

4. 接口隔离原则简介

  • 4.1 接口隔离原则 定义:
    + 用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口。
    + 一个类对一个类的依赖应该建立在最小的接口上 建立单一接口, 不要建立庞大臃肿的接口。
    + 尽量细化接口,接口中的方法尽量少!

  • 接口隔离slogan注意适度原则,一定要适度,多做前期策划工作,确保高内聚低耦合!

  • 优点: 符合我们常说的高内聚低耦合的设计思想, 从而使得类具有很好的可读性,可扩展性和可维护性

此处输入图片的描述

4.1 举个栗子: 接口隔离原则在日常开发中的应用

servlet 2. 中 提供了一系列的 listener监听器接口,遵守了接口隔离原则来监听不同的资源变化!*

javax.servlet包下

ServletContextListener:
实现该接口,重写 contextInitialized 与 contextDestroyed 方法可以让实现类的方法在Web容器启动与关闭时被调用,可以用来初始化Web 资源, 注销服务 等~

扫描二维码关注公众号,回复: 9163652 查看本文章

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出现在成员变量,方法的输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类.

  • 优点: 降低类之间的耦合

此处输入图片的描述

发布了29 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_37977176/article/details/85019858