W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
依賴倒置原則(Dependency Inversion Principle, DIP)是面向?qū)ο笤O(shè)計(jì)原則之一,它是SOLID原則中的"D"。依賴倒置原則的核心思想是高層策略性業(yè)務(wù)規(guī)則不應(yīng)該依賴于低層的具體實(shí)現(xiàn)細(xì)節(jié),而兩者都應(yīng)該依賴于抽象。
依賴倒置原則主要包含兩個(gè)基本點(diǎn):
依賴倒置原則的優(yōu)點(diǎn)包括:
在實(shí)際應(yīng)用中,依賴倒置原則可以通過(guò)以下方式實(shí)現(xiàn):
依賴倒置原則是實(shí)現(xiàn)開(kāi)閉原則(Open/Closed Principle)的基礎(chǔ),即軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。通過(guò)依賴倒置,我們可以更容易地?cái)U(kuò)展系統(tǒng)功能,而不需要修改現(xiàn)有的代碼。
下面來(lái)看一個(gè)簡(jiǎn)單的Java代碼示例,讓我們更好的理解依賴倒置原則的應(yīng)用:
首先,我們定義一個(gè)抽象接口,表示一個(gè)可以發(fā)送消息的系統(tǒng):
public interface MessageService {
void sendMessage(String message);
}
然后,我們創(chuàng)建一個(gè)具體的發(fā)送服務(wù)實(shí)現(xiàn)這個(gè)接口:
public class EmailService implements MessageService {
@Override
public void sendMessage(String message) {
System.out.println("Sending email: " + message);
}
}
接下來(lái),我們有一個(gè)高層策略類,它使用MessageService
接口而不是具體的EmailService
類:
public class NotificationService {
private MessageService messageService;
// 構(gòu)造函數(shù)注入依賴
public NotificationService(MessageService messageService) {
this.messageService = messageService;
}
public void notifyUser(String message) {
// 依賴于抽象,而不是具體實(shí)現(xiàn)
messageService.sendMessage(message);
}
}
最后,我們可以在客戶端代碼中使用這個(gè)系統(tǒng):
public class Client {
public static void main(String[] args) {
// 創(chuàng)建具體的消息服務(wù)
MessageService emailService = new EmailService();
// 將具體的消息服務(wù)注入到高層策略中
NotificationService notificationService = new NotificationService(emailService);
// 使用高層策略發(fā)送消息
notificationService.notifyUser("Hello, this is a test email.");
}
}
在這個(gè)例子中,NotificationService
類是一個(gè)高層策略類,它依賴于MessageService
接口的抽象。我們通過(guò)構(gòu)造函數(shù)注入具體的消息服務(wù)EmailService
。這樣,如果將來(lái)我們需要更換消息服務(wù)的實(shí)現(xiàn)(比如使用SmsService
),我們只需要?jiǎng)?chuàng)建一個(gè)新的實(shí)現(xiàn)類并注入到NotificationService
中,而不需要修改NotificationService
的代碼。這就體現(xiàn)了依賴倒置原則的精神。依賴倒置原則接口抽象類
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: