设计模式的六大原则(2)
在上一篇文章中讲到了开闭原则和里氏代换原则,只有这些设计原则的存在,才会让我们的程序更加规范便于二次开发,这篇文章将介绍依赖倒置原则 和 单一职责原则。
1、依赖倒置原则(Dependence Inversion Principle)
依赖倒置原则:
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
其核心思想是: 要面向接口编程,不要面向实现编程
依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合
依赖倒置原则的作用:
- 降低类间的耦合性
- 提高系统的稳定性
- 减少并行开发引起的风险
- 提高代码的可读性和可维护性
依赖倒置原则的实现方法:
- 每个类尽量提供接口或抽象类,或者两者都具备
- 变量的声明类型尽量是接口或者是抽象类
- 任何类都不应该从具体类派生
- 使用继承时尽量遵循里氏替换原则
演示案例:
顾客可以在多个网店购物:
结构图:
商店接口:
/**
* 商店
*/
public interface Shop {
public String sell(); //卖东西
}
淘宝网店(继承商店接口):
/**
* 淘宝网店
*/
public class tbShop implements Shop{
@Override
public String sell() {
return "在淘宝网店上购物";
}
}
天猫网店(继承商店接口):
/**
* 天猫网店
*/
public class tmShop implements Shop{
@Override
public String sell() {
return "在天猫网店上购物";
}
}
顾客类:
/**
* 顾客
*/
public class Customer {
//一个购物的方法
public void shopping(Shop shop){
System.out.println(shop.sell());
}
}
测试类:
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Customer c = new Customer();
c.shopping(new tbShop());
c.shopping(new tmShop());
}
}
结果:
在淘宝网店上购物
在天猫网店上购物
在这个案例中,所有的网店类都是依赖商店接口,使用商店接口里面的购物方法,这也就是依赖倒置原则
2、单一职责原则(Single Responsibility Principle)
单一职责原则的定义:
规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
但是这个原则提出一个对象不应该承担太多职责,如果存在,有以下缺点:
- 一个职责的变化可能会削弱或者抑制这个类实现其他职责的能力
- 当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费
单一职责原则的优点:
- 降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多
- 提高类的可读性。复杂性降低,自然其可读性会提高
- 提高系统的可维护性。可读性提高,那自然更容易维护了
- 变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响