Java設(shè)計(jì)模式七大原則之依賴倒置原則詳解
定義
依賴倒轉(zhuǎn)原則,又稱依賴倒置原則(Dependence Inversion Principle),又稱DIP原則,即:上層模塊不應(yīng)該依賴底層模塊,它們都應(yīng)該依賴于抽象,抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。抽象對(duì)代碼來說即接口或者抽象類 細(xì)節(jié)對(duì)代碼來說即實(shí)現(xiàn)類。換句話說 依賴倒轉(zhuǎn)原則的核心的理念 相對(duì)于細(xì)節(jié)來說,抽象要穩(wěn)定得多。要求我們 面向接口編程,進(jìn)行設(shè)計(jì)。
案例
需求
工作人員接收微信老板發(fā)來的加班消息
方案一
定義工作人員Worker.java
/**
* 工作人員
* @author:liyajie
* @createTime:2022/1/30 20:08
* @version:1.0
*/
public class Worker {
/**
* 工作人員接收消息
* @author: liyajie
* @date: 2022/1/30 20:10
* @param weChat
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void getMessage(WeChat weChat){
weChat.sendMessage();
}
}定義微信消息類WeChat.java
/**
* 微信消息類
* @author:liyajie
* @createTime:2022/1/30 20:07
* @version:1.0
*/
public class WeChat {
/**
* 微信發(fā)送的消息
* @author: liyajie
* @date: 2022/1/30 20:10
* @param
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void sendMessage(){
System.out.println("微信上,老板找你加班了");
}
}定義測(cè)試類Test1.java
public class Test1 {
public static void main(String[] args) {
new Worker().getMessage(new WeChat());
}
}方案二
定義消息接口IMessage.java
/**
* 消息接口
* @author:liyajie
* @createTime:2022/1/30 20:15
* @version:1.0
*/
public interface IMessage {
void sendMessage();
}定義微信消息類WeChatNew.java
/**
* 微信消息類
* @author:liyajie
* @createTime:2022/1/30 20:07
* @version:1.0
*/
public class WeChatNew implements IMessage{
/**
* 微信發(fā)送的消息
* @author: liyajie
* @date: 2022/1/30 20:10
* @param
* @return void
* @exception:
* @update:
* @updatePerson:
**/
@Override
public void sendMessage(){
System.out.println("微信上,老板找你加班了");
}
}定義飛書類FeiShu.java
/**
* 飛書消息類
* @author:liyajie
* @createTime:2022/1/30 20:16
* @version:1.0
*/
public class FeiShu implements IMessage{
@Override
public void sendMessage() {
System.out.println("飛書上,老板喊你加班了");
}
}定義工作人員類WorkerNew.java
/**
* 工作人員類
* @author:liyajie
* @createTime:2022/1/30 20:18
* @version:1.0
*/
public class WorkerNew {
/**
* 工作人員接收消息
* @author: liyajie
* @date: 2022/1/30 20:10
* @param iMessage
* @return void
* @exception:
* @update:
* @updatePerson:
**/
public void getMessage(IMessage iMessage){
iMessage.sendMessage();
}
}定義測(cè)試類Test2.java
public class Test2 {
public static void main(String[] args) {
// 微信
new WorkerNew().getMessage(new WeChatNew());
// 飛書
new WorkerNew().getMessage(new FeiShu());
}
}對(duì)比分析
方案一違反了依賴倒置原則,如果功能需求擴(kuò)展,比如說需要擴(kuò)展一種飛書發(fā)送消息,我們需要新增一個(gè)飛書類,并實(shí)現(xiàn)發(fā)送消息的功能,工作人員的類也需要修改接收消息的方法,客戶端也需要進(jìn)行相應(yīng)的修改,改動(dòng)大,風(fēng)險(xiǎn)大。
方案二遵守了依賴倒置原則,同樣的需求擴(kuò)展,抽象一個(gè)公共的消息接口,所有的微信,飛書等發(fā)送消息的類只要實(shí)現(xiàn)該接口,重寫發(fā)送消息的方法,工作人員的接收消息方法以消息接口為入?yún)ⅲ蛻舳酥恍枰獋魅胂鄳?yīng)的消息實(shí)體類,擴(kuò)展方便,耦合低。
總結(jié)
通過上面兩個(gè)案例,我們可以得到以下結(jié)論:
1.低層模塊盡量都要有抽象類或接口,或者兩者都有,
2.程序穩(wěn)定性更好,變量的聲明類型盡量是抽象類或者接口,這樣我們的變量引用和實(shí)際對(duì)象間,就存在一個(gè)緩沖層, 利于程序擴(kuò)展和優(yōu)化
到此這篇關(guān)于Java設(shè)計(jì)模式七大原則之依賴倒置原則詳解的文章就介紹到這了,更多相關(guān)Java依賴倒置原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java加密解密工具(適用于JavaSE/JavaEE/Android)
這篇文章主要介紹了Java加密解密工具,適用于JavaSE/JavaEE/Android,感興趣的小伙伴們可以參考一下2016-04-04
Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
System.identityHashCode和hashCode的區(qū)別及說明
String調(diào)用hashCode()和System.identityHashCode()返回值不同是因?yàn)镾tring重寫了hashCode()方法,而System.identityHashCode()返回對(duì)象的內(nèi)存地址哈希值;Test調(diào)用兩個(gè)方法返回值相同是因?yàn)門est沒有重寫hashCode()方法,因此兩者調(diào)用底層的JVM_IHashCode方法返回相同值2024-11-11
Java多線程編程小實(shí)例模擬停車場(chǎng)系統(tǒng)
這是一個(gè)關(guān)于Java多線程編程的例子,用多線程的思想模擬停車場(chǎng)管理系統(tǒng),這里分享給大家,供需要的朋友參考。2017-10-10
SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能(附源碼)
這篇文章主要介紹了SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12

