设计模式之依赖倒置原则
依赖倒置原则(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 2019-01-30 18:01 lovebeauty 阅读(442) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 数据库设计的三大范式