java 依赖倒置_设计模式之三依赖倒置原则(DIP)
依賴倒置(Dependence Inversion Principle,DIP)
High level modules should not deppend oupon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
定義中有三層含義:
高層模塊不應該依于低層模塊,兩者都應該依賴于其抽象。
抽象不應該依賴細節。
細節應該依賴抽象。
理解: 高層模塊相對低層模塊而言。低層模塊是不可細分的原子邏輯模塊。其組裝即是高層模塊。
面向對象的語言中,抽象就是接口或者抽象類,不能被實例化。細節就是繼承抽象類或實現接口而產生的類,可以被實例化。
java中依賴倒置原則的體現:
1. 模塊之間的依賴通過抽象發生,實現類直接不直接發生依賴關系,依賴是通過接口和抽象類產生的。
2. 接口和抽象類不依賴于實現類
3. 實現類依賴于借口或者抽象類
即--面向接口編程 。
案例分析:程序員一般都是多技能型的,在工作時會使用多種編程語言,不同語言的代碼會以不同的語法運行。因此有這么一個業務場景,程序員使用不同的語言進行編程,代碼以不同的語法運行。
這里有三類對象,編程語言-程序員-業務場景
image.png
代碼:
Coder.java
public class Coder {
public void code(Java java){
java.run();
}
}
Java.java
public class Java {
public void run(){
System.out.println("代碼以Java的語法運行~");
}
}
Client.java
public class Client {
public static void main(String[] args) {
Coder coderA = new Coder();
Java java = new Java();
coderA.code(java);
}
}
這里存在一個問題,如果我們的系統擴展的比較大:存在多種程序員,如后端工程師,前端工程師,每種程序員的技術棧不一樣,每種語言的語法也都不一樣,那我們的程序員Coder類的code方法需要根據語言的不同重載很多個版本才能滿足程序員使用多種語言進行編程的需求。這樣一來,每次增加一種程序員,我們需要根據其技能增加code的重載方法;每次增加一種語言,我們需要相應地擴充使用它的程序員的相關方法。ade,殺一個產品經理祭天,這么頻繁變態的需求。
貫徹依賴倒置的原則,解決方案應該是這樣的:
image.png
ICoder.java 程序員接口
public interface ICoder {
public void code(ILang iLang);
}
ILang.java 語言接口
public interface ILang {
void runWithSyntax();
}
CoderA.java A類型程序員
public class CoderA implements ICoder {
@Override
public void code(ILang iLang) {
iLang.runWithSyntax();
}
}
Java.java java語言
public class Java implements ILang {
@Override
public void runWithSyntax() {
System.out.println("程序以Java的語法運行");
}
}
Lisp.java lisp語言
public class Lisp implements ILang {
@Override
public void runWithSyntax() {
System.out.println("程序以Lisp的語法運行");
}
}
Client.java 業務場景類
public class Client {
public static void main(String[] args) {
ICoder coder = new CoderA();
ILang lang = new Java();
coder.code(lang);
}
}
這樣的解決方案的好處是:當新增低層模塊時,不需要修改與其平行的模塊,只需要修改業務場景類,即高層模塊即可,更利于拓展系統。
上面的代碼里面新增Lisp類以后,直接在Client類里面使用ILang lang = new Lisp();即可,程序員就能使用Lisp的語法進行編程了。避免去修改程序員類的相關方法。程序應該是面向拓展的而不是面向修改的。
依賴傳遞的三種方法
通過構造方法傳遞
在需要注入接口的類中聲明接口,然后通過構造方法的參數初始化。在調用的時候直接傳入一個接口的實現類即可。
Setter方法傳遞
和構造方法注入相似。
接口注入
形同這樣的方式是接口注入: ILang lang = new Java();
晚安各位!!!
總結
以上是生活随笔為你收集整理的java 依赖倒置_设计模式之三依赖倒置原则(DIP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线手册速查
- 下一篇: 特殊字符、数字开头,及中英文字符排序(类