⭐简单说两句⭐
CSDN个人主页:后端小知识
GZH:
后端小知识
欢迎关注点赞收藏⭐️留言
设计模式-浅谈依赖倒置原则
简单解释了7种原则,重点说了下依赖倒置原则
UML类图中箭头的意思(直接截图的Visio里面的):
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
对修改关闭,对扩展开放
任何能使用父类对象的地方,都应该能透明的替换为子类对象
上层不能依赖于下层,他们都应该依赖于抽象
代码实战
举个例子:人给动物喂食的场景
反例:
猫吃鱼
public class CatAnimal {
void eat(){
System.out.println("猫吃鱼");
}
}
狗啃骨头
public class DogAnimal {
void eat(){
System.out.println("狗啃骨头");
}
}
人喂动物
public class Person {
//喂动物
void feed(DogAnimal dog){
dog.eat();
}
void feed(CatAnimal cat){
cat.eat();
}
public static void main(String[] args) {
Person person = new Person();
person.feed(new DogAnimal());
person.feed(new CatAnimal());
}
}
结果
狗啃骨头
猫吃鱼
看下类图
Person是直接依赖Dog和Cat的,若还要喂食其他动物,还需要在Person类中去重载feed方法
正例:
定义一个动物接口: Animal.java
Animal接口中有一个吃(eat)的方法
public interface Animal {
public void eat();
}
Cat实现动物这个接口
public class CatAnimal implements Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
Dog实现动物这个接口
public class DogAnimal implements Animal{
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
Person喂食动物
public class Person {
void fead(Animal animal){
animal.eat();
}
}
测试
public class Test {
public static void main(String[] args) {
Person person = new Person();
person.fead(new CatAnimal());
person.fead(new DogAnimal());
}
}
结果
猫吃鱼
狗啃骨头
看下类图(省略了Test类)
小总结:
Person类不再直接依赖Dog和Cat了,而是依赖于Animal这个接口,当我们还需要去喂食其他动物时,只需要创建个具体动物类去实现动物接口并重写方法就OK,不用再去重载Person的fead方法了,实现了解耦
客户端不应该依赖那些它不需要的接口,当一个接口太大时,需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可
优先使用对象组合,而不是继承来达到复用的目的
迪米特法则也叫做最少知道原则(封装)
一个类,对于其他类,要知道的越深越好
结语
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!
CSDN个人主页:后端小知识
GZH:后端小知识
欢迎关注点赞收藏⭐️留言