一、原则:
高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。面向接口编程,不要面向实现编程。
二、作用:
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();
- }
- }
效果: