- 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件的开发效率,节约软件开发成本和维护成本,我们将在下面的几节中依次来介绍者7条原则,本节介绍里依赖倒置原则
依赖倒置原则的定义
是Object Mentor 公司总裁罗伯特·马丁(Robert C·Martin)于1996年在C++ Report 上发表的文章。
依赖倒置原则原定义:高层模块不应该依赖底层模块,两者应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High lebel modules shoulenot depend upon low level modules.Both should depend upon.Abstractions should not depend upon details. Details should depend upon adstractions).
软件设计中,细节往往多聚变化,而抽象层先对稳定,所以要以抽象层为基础搭建框架,抽象层一般会暴露接口或定义为抽象类,细节类实现/继承抽象层完成细节逻辑。
接口和抽象类是指定规范和契约,不涉及具体业务,具体业务有细节实现类去完成。
依赖倒置原则 作用
1.降低类间的耦合性
2.提高系统稳定性
3.减少并行开发引起的风险
4.提高代码的可读性和可维护性
依赖倒置原则 实现方法
- 每个类尽量提供接口或抽象类,或者两者都具备
- 变量的声明类型尽量使接口/抽象类
- 任何类都不应该从具体类派生(从1.中派生)
- 使用继承时尽量遵循里氏替换原则
【例】依赖倒置原则“顾客购物程序”应用
分析:”顾客类“和“商店类”的关系。商店类中有sell()方法,顾客类通过此方法定义购物。
//商店Xxx 有销售方法
class Customer{
public void shopping(XxxShop shop){
//购物
System.out.println(shop.sell());
}
}
//商店Sss 也有销售方法
class Customer{
public void shopping(SssShop shop){
//购物
System.out.println(shop.sell());
}
}
//可以定义一个Shop类 让Sss Xxx 继承或实现 就都具备shell 方法
class Customer {
public void shopping(Shop shop) {
//购物
System.out.println(shop.sell());
}
}
shop.png
实现代码
package principle;
public class DIPtest {
public static void main(String[] args) {
Customer wang = new Customer();
System.out.println("顾客购买以下商品:");
wang.shopping(new SssShop ());
wang.shopping(new XxxShop ());
}
}
//商店
interface Shop {
public String sell(); //卖
}
//韶关网店
class SssShop implements Shop {
public String sell() {
return "Sss土特产:香菇、木耳……";
}
}
//婺源网店
class XxxShop implements Shop {
public String sell() {
return "Xxx土特产:绿茶、酒糟鱼……";
}
}
//顾客
class Customer {
public void shopping(Shop shop) {
//购物
System.out.println(shop.sell());
}
}
网友评论