日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java 依赖倒置_设计模式之三依赖倒置原则(DIP)

發布時間:2023/12/20 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。