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

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

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

简单解释了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方法了,实现了解耦

接口隔离原则

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

组合复用

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

迪米特法则

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

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

结语


相关文章
|
25天前
|
设计模式
设计模式六大原则之依赖倒置原则
设计模式六大原则之依赖倒置原则
|
2月前
|
设计模式 Java
Java设计模式七大原则之依赖倒置原则
Java设计模式七大原则之依赖倒置原则
42 0
|
设计模式 Java Spring
【设计模式】依赖倒置原则与工厂方法模式与spring
【设计模式】依赖倒置原则与工厂方法模式与spring
|
设计模式 测试技术
设计模式 - 六大设计原则之DIP(依赖倒置原则)
设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 依赖倒置原则是实现开闭原则的重要途径之一, 它降低了类之间的耦合,提高了系统的稳定性和可维护性。
115 0
设计模式 - 六大设计原则之DIP(依赖倒置原则)
|
设计模式
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(三)
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(三)
101 0
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(三)
|
设计模式 Java uml
设计模式六大原则(三)----依赖倒置原则
设计模式六大原则(三)----依赖倒置原则
107 0
|
存储 设计模式 数据库
大话设计模式--第五章 依赖倒置原则
依赖倒置原则: 原话解释的是, 抽象不应该依赖于细节, 细节应该依赖于抽象. 说白了, 就是上面那句话。针对接口编程, 不要针对实现编程。
88 0
|
设计模式 Java
设计模式—— 三:依赖倒置原则
设计模式—— 三:依赖倒置原则
216 0
设计模式—— 三:依赖倒置原则
|
设计模式
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(二)
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(二)
113 0
|
设计模式
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(一)
【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(一)
103 0