一、原则:
高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。面向接口编程,不要面向实现编程。
二、作用:
1.可以降低类间的耦合性
2.可以提高系统的稳定性
3.减少并行并发引起的风险
4.提高代码的可读性和可维护性
三、实现:
1.通过面向接口的编程来降低类间的耦合
2.每个类尽量提供接口或抽象类,或者两者都具备
3.变量的声明类型尽量是接口或者是抽象类
4.任何类都不应该从具体类派生
5.使用继承时尽量遵循里式替换原则。
四、涉及到的设计模式:
抽象工厂模式、建造者模式、模板方法、策略模式、命令模式、桥接模式
五、示例:
1.比如TreeMap和HashMap都是继承自AbstractMap类。覆写了里面的size(),clone()等方法。
2.鸟类飞行:
接口:
public interface Bird {
void fly();
}
天鹅:
public class Swan implements Bird {
@Override
public void fly() {
System.out.println("天鹅用大翅膀在飞");
}
}
麻雀:
public class Sparrow implements Bird {
@Override
public void fly() {
System.out.println("麻雀用小翅膀在飞");
}
}
调用:
public class MainTest {
public static void main(String[] args) {
Bird swan = new Swan();
swan.fly();
Bird sparrow = new Sparrow();
sparrow.fly();
}
}
效果: