1. 程式人生 > 其它 >設計模式之依賴倒置原則示例

設計模式之依賴倒置原則示例

  我們來寫一個關於司機開車的示例,假設我們現在有個司機,可以開車,然後有一輛賓士,於是就可以讓車跑起來。

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);
    }
}

  這樣張三就直接開走了賓士和寶馬,要是接下來再來一輛奧迪,那麼原有的所有程式碼都無需改動,只用新增一輛奧迪的車即可。