设计模式-浅谈依赖倒置原则

简单说两句

CSDN个人主页:后端小知识

GZH后端小知识

欢迎关注点赞收藏⭐️留言

设计模式-浅谈依赖倒置原则
简单解释了7种原则,重点说了下依赖倒置原则

UML类图中箭头的意思(直接截图的Visio里面的):

设计模式-浅谈依赖倒置原则_第1张图片

单一职责

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中

开闭原则

对修改关闭,对扩展开放

里氏替换原则

任何能使用父类对象的地方,都应该能透明的替换为子类对象

依赖倒置:

上层不能依赖于下层,他们都应该依赖于抽象

代码实战

举个例子:人给动物喂食的场景

反例:

猫吃鱼

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());
    }
}

结果

狗啃骨头
猫吃鱼

看下类图

设计模式-浅谈依赖倒置原则_第2张图片

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类)

设计模式-浅谈依赖倒置原则_第3张图片

小总结:

Person类不再直接依赖Dog和Cat了,而是依赖于Animal这个接口,当我们还需要去喂食其他动物时,只需要创建个具体动物类去实现动物接口并重写方法就OK,不用再去重载Person的fead方法了,实现了解耦

接口隔离原则

客户端不应该依赖那些它不需要的接口,当一个接口太大时,需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可

组合复用

优先使用对象组合,而不是继承来达到复用的目的

迪米特法则

迪米特法则也叫做最少知道原则(封装)

一个类,对于其他类,要知道的越深越好

结语

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!

CSDN个人主页:后端小知识

GZH后端小知识

欢迎关注点赞收藏⭐️留言

你可能感兴趣的:(#,设计模式篇,设计模式,依赖倒置原则,java,后端)