IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 设计模式—依赖倒置原则 -> 正文阅读

[Java知识库]设计模式—依赖倒置原则

?设计模式概念与作用:

设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。特定环境下特定问题的处理方法。
1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用
2)提高扩展性 大量使用面向接口编程,预留扩展插槽,新的功能或特性很容易加入到系统中来
3)提高灵活性 通过组合提高灵活性,可允许代码修改平稳发生,对一处修改不会波及到其他模块
4) 提高开发效率 正确使用设计模式,可以节省大量的时间





设计模式六大原则:

1.单一职责原则
2.里氏替换原则
3.依赖倒置原则
4.接口隔离原则
5.迪米特法则
6.开闭原则





依赖倒置原则:

依赖倒置原则(Dependence Inversion Principle(DIP))高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。核心思想是:要面向接口编程,不要面向实现编程。

依赖倒置原则的作用:

  1. 可以降低类间的耦合性
  2. 可以提高系统的稳定性
  3. 可以减少并行开发引起的风险
  4. 可以提高代码的可读性和可维护性

依赖倒置原则遵循以下几点

  1. 每个类尽量都要有接口或抽象类,或者抽象类和接口都有。
  2. 变量的表面类型尽量是接口或者抽象类
  3. 任何类都不应该从具体类派生
  4. 使用继承时尽量遵循里氏替换原则





案例说明:

案例:先不考虑依赖倒置原则,我们设计一段程序,需求是:有一个商城项目,要连接MySQL数据库。我们用ShopProject类代表商城项目,用MySQLDB类代表MySQL数据库。

package com.design.principle.demo03;

public class ShopProject {

	//连接MySQLDB数据库
	public void connectDB(MySQLDB  mySQLDB){
		mySQLDB.info();
	}
}
package com.design.principle.demo03;

public class MySQLDB{
	
	public void info(){
		System.out.println("连接MySQLDB数据库完成");
	}
}
package com.design.principle.demo03;

public class Test {

	public static void main(String[] args) {
		ShopProject shopProject = new ShopProject();
		MySQLDB mySQLDB = new MySQLDB();
		shopProject.connectDB(mySQLDB);
	}
}

执行结果

连接MySQLDB数据库完成

结果:程序执行结果,看起来没什么问题。但是,假如我们要更换Oracle数据库呢,我们需要新增

OracleDB数据库类。但是ShopProject不能连接OracleDB,因为ShopProject没有实现连接OracleDB类的方法。我们还得添加连接OracleDB的方法。高层模块也得修改,才可以执行

package com.design.principle.demo03;

public class OracleDB{

	public void info(){
		System.out.println("连接OracleDB数据库完成");
	}
}

package com.design.principle.demo03;

public class ShopProject{

	// 连接MySQLDB数据库
	public void connectDB(MySQLDB mySQLDB) {
		mySQLDB.info();
	}
	
	// 连接OracleDB数据库
	public void connectDB(OracleDB oracleDB) {
		oracleDB.info();
	}

}

package com.design.principle.demo03;

public class Test {

	public static void main(String[] args) {
		ShopProject shopProject = new ShopProject();
		OracleDB oracleDB = new OracleDB();
		shopProject.connectDB(oracleDB);
	}
}

执行结果

连接OracleDB数据库完成

额,我们改了ShopProject类,新增了OracleDB,高级模块(测试类)也改了。最终才完成了连接OracleDB的需求。

突然需求又增加了,我们一个新的工程类要连接OracleDB,我们还要增加ManageProject。太烦人了,需求不断增加,代码无止境的修改。

接下来我们用依赖倒置原则来实现以上代码。

首先我们需要定义接口IProject接口,ShopProject、还有未写的ManageProject,以及将来新增的工程类都继承IProject。 然后定义IDB数据库接口,OracleDB、MySQLDB、或者之后新增的其他数据库都继承IDB。

package com.design.principle.demo04;

public interface IProject {
	
	public void connectDB(IDB idb);
}
package com.design.principle.demo04;

public interface IDB {
	public void info();
}
package com.design.principle.demo04;

public class ShopProject implements IProject{
	
	// 连接数据库
	@Override
	public void connectDB(IDB idb) {
		idb.info();
	}
}
package com.design.principle.demo04;

public class MySQLDB implements IDB {

	// 连接MySQLDB数据库
	@Override
	public void info() {
		System.out.println("连接MySQLDB数据库完成");
	}

}
package com.design.principle.demo04;

public class OracleDB implements IDB{

	//连接OracleDB
	@Override
	public void info(){
		System.out.println("连接OracleDB数据库完成");
	}
}
package com.design.principle.demo04;

public class Test {

	public static void main(String[] args) {
		IProject shopProject = new ShopProject();
		IDB mySQLDB = new MySQLDB();
		shopProject.connectDB(mySQLDB);
		
		IDB oracleDB = new OracleDB();
		shopProject.connectDB(oracleDB);
	}
}

执行结果

连接MySQLDB数据库完成
连接OracleDB数据库完成

? ? ? ? 以上依赖倒置原则对代码进行重构。

总结:

? ? ? ?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:12:19  更:2021-11-23 12:13:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:08:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码