設計模式之依賴倒置原則示例
阿新 • • 發佈:2021-07-31
我們來寫一個關於司機開車的示例,假設我們現在有個司機,可以開車,然後有一輛賓士,於是就可以讓車跑起來。
public class Driver { // 司機職責就是駕駛汽車 public void drive(Benz benz) { benz.run(); } } public class Benz { // 車的作用就是跑 public void run() { System.out.println("賓士車跑起來了"); } } public class Client { public static void main(String[] args) { Driver zhangsan = new Driver(); Benz benz = new Benz(); // 張三開車 zhangsan.drive(benz); } }
以上程式碼就可以讓張三把賓士車開起來,可是這樣子就有一個問題,如果現在有一輛寶馬:
public class BMW { // 車的作用就是跑 public void run() { System.out.println("寶馬車跑起來了"); } }
我們發現張三並不能讓寶馬車跑起來,因為Driver依賴Benz太緊,當多了BMW後無法擴充套件。因此針對介面程式設計,依賴於抽象而不依賴於具體。如下程式碼所示:
public interface IDriver { // 司機職責就是駕駛汽車 public void drive(Icar car); } public class Driver implements IDriver{ // 司機職責就是駕駛汽車 public void drive(Icar car) { car.run(); } } public interface Icar { // 車的作用就是跑 public void run(); } public class Benz implements Icar { // 車的作用就是跑 public void run() { System.out.println("賓士車跑起來了"); } } public class BMW implements Icar { // 車的作用就是跑 public void run() { System.out.println("寶馬車跑起來了"); } } public class Client { public static void main(String[] args) { IDriver zhangsan = new Driver(); Benz benz = new Benz(); zhangsan.drive(benz); BMW bmw = new BMW(); zhangsan.drive(bmw); } }
這樣張三就直接開走了賓士和寶馬,要是接下來再來一輛奧迪,那麼原有的所有程式碼都無需改動,只用新增一輛奧迪的車即可。