设计模式之依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,简称DIP)面向接口编程,多态(接口类或者抽象类)

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖实现类;实现类应该依赖抽象。 一旦依赖的低层或者具体类改动,则高层可能会需要改动

 

错误做法: //高层Driver模块不应该依赖低层DaZhong模块

复制代码
public class DaZhong {
    public void startup(){
        System.out.println("车子启动了");
    }
}

//高层Driver模块不应该依赖低层DaZhong模块
public class Driver { public void driver(DaZhong vehicle){ vehicle.startup(); } } public class TaskTest { public static void main(String[] args) { Driver driver2 = new Driver(); DaZhong dz2 = new DaZhong(); driver2.driver(dz2); } }
复制代码

 

 

正确做法:抽象IDriver依赖抽象IVehicle;具体的DaZhongVehicle依赖于抽象IVehicle,依赖倒置了

复制代码
public interface IDriver {
    //接口声明依赖对象,接口注入IVehicle,抽象IDriver依赖抽象IVehicle
    void driver(IVehicle vehicle);
}

public class BaoMaDriver implements IDriver {
    IVehicle vehicle;

    //构造函数注入,DaZhongVehicle依赖IVehicle
    public  BaoMaDriver(IVehicle vehicle) {
        this.vehicle = vehicle;
    }
        public BaoMaDriver(){}

    public void driver(IVehicle vehicle) {
        vehicle.startup();
    }

    //set方法注入,DaZhongVehicle依赖IVehicle
    public void setVehicle(IVehicle vehicle) {
        this.vehicle = vehicle;
    }

}


public interface IVehicle {
    void startup();
}


public class DaZhongVehicle implements IVehicle {
    public void startup() {
        System.out.println("大众启动了");
    }

}

public class TaskTest {
    public static void main(String[] args) {
        IDriver driver = new BaoMaDriver();
        IVehicle dz = new DaZhongVehicle();
//这里变成了DaZhongVehicle依赖IVehicle,具体依赖于抽象,依赖倒置了

driver.driver(dz);
}
}
复制代码

 

posted on   lovebeauty  阅读(442)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2012-01-30 数据库设计的三大范式

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示