本文主要是介绍六大设计原则之DIP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.简介
2.定义
3.依赖
3.1 构造函数传递依赖对象
3.2 Setter方法传递依赖对象
3.3 接口声明依赖对象
4.举例
1.简介
依赖倒置原则(Dependence Inversion Principle),简称DIP。
2.定义
高层模块不应该依赖于低层模块,两者都应该依赖其抽象。抽象不应该依赖细节。细节应该依赖抽象。这里的低层模块就是不可分割的原子逻辑,原子逻辑再组装就成了高级模块。抽象是指接口或者抽象类,两者都是不能直接被实例化;细节就是实现类,实现接口或继承抽象类而产生的类,可以直接被直接实例化。所谓的能否直接实例化也就在于是否可以通过关键字new产生的一个对象。简单来说就是模块之间的依赖都是通过抽象发生,实现类之间并不直接产生依赖关系,其依赖关系都是通过接口或者抽象类产生的。实现类依赖接口或抽象类,但接口或抽象类不依赖实现类。这也正好对应面向接口编程。
3.依赖
传说中的实现方式有三种,且听我一一道来。假设存在两个接口IFace1和IFce2,IFace1的实现类依赖IFace2。
3.1 构造函数传递依赖对象
public interface IFace1{public void method1();
}public interface IFace2{public void method2();
}public class face1 implements IFace1{private IFace2 face2;public face1(IFace2 face2) {this.face2 = face2;}public void method1() {this.face2.method2();}
}
3.2 Setter方法传递依赖对象
public interface IFace1{public void method1();
}public interface IFace2{public void method2();
}public class face1 implements IFace1{private IFace2 face2;public void setFace2(IFace2 face2) {this.face2 = face2;}public void method1() {this.face2.method2();}
}
3.3 接口声明依赖对象
public interface IFace1{public void method1();
}public interface IFace2{public void method2();
}public class face1 implements IFace1{public void method1(IFace2 face2) {face2.method2();}
}
4.举例
想必大家都看过水浒传吧,其中有一人身上刺满一身青龙,刀枪剑戟十八班武艺样样精通,江湖人称九龙纹龙史进是也。
public interface IWupo {public void martialArts(IWeapon weapon);
}public interface IWeapon {public void attack();
}public class Wupo implements IWupo {public void martialArts(IWeapon weapon) {weapon.attack();}
}public class Sword implements IWeapon {public void attack() {System.out.println("看我独孤九剑");}
}public class Stick implements IWeapon {public void attack() {System.out.println("打狗棍法,看棍");}
}public class Shuifu {public static void main(String[] args) {IWupo shiJin = new Wupo();IWeapon sword = new Sword();shiJin.martialArts(sword);}
}
这样,如果史进不想用剑了,改用其他兵器,我们可以只对高层模块进行修改
public class Shuifu {public static void main(String[] args) {IWupo shiJin = new Wupo();IWeapon stick = new Stick();shiJin.martialArts(stick);}
}
这便是DIP的核心,面向接口编程。
这篇关于六大设计原则之DIP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!