該原則理解起來稍微有點抽象,我們可以將該原則通俗的理解為:"依賴于抽象”。

該規(guī)則告訴我們,程序中所有的依賴關系都應該終止于抽象類或者接口,從而達到松耦合的目的。因為我們在應用程序中編寫的大多數具體類都是不穩(wěn)定的。我們不想直接依賴于這些不穩(wěn)定的具體類。通過把它們隱藏在抽象和接口的后面,可以隔離它們的不穩(wěn)定性。

舉個例子

一個Button對象會觸發(fā)Click方法,當被按下時,會調用Light對象的TurnOn方法,否則會調用Light對象的TurnOff方法。

這個設計存在兩個問題:

  1. Button類直接依賴于Light類,這種依賴關系意味著當Light改變時,Button類會受到影響;
  2. Button對象只能控制Light對象,想要控制電視或者冰箱就不行了;

新的設計:

這個方案對那些需要被Button控制的對象提出了一個約束。需要被Button控制的對象必須要實現ISwitchableDevice接口。

所為原則,只是描述了什么是對的,但是并沒有說清楚如何去做。在軟件工程中,我們經常使用DI(依賴注入)來達到這個目的。但是提到依賴注入,人們又會經常提起IoC這個術語。所以先讓我們來了解下什么是IoC。

二、IoC

IoC的全名是Inverse of Control,即控制反轉。這一術語并不是用來描述面向對象的某種原則或者模式,IoC體現為一種流程控制的反轉,一般用來對框架進行設計。

舉個例子

ReportService是一個用來顯示報表的流程,該流程包括Trim(),Clean(),Show()三個環(huán)節(jié)。

public class ReportService { private string _data; public ReportService(string data) {
        _data = data;
    } public void Trim(string data) {
    
        
		

網友評論