设计模式原则之依赖倒置原则

                                                                                                                                 依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,简称DIP)

依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
  • 抽象不应该依赖细节;
  • 细节应该依赖抽象。

      更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design,面向对象设计)的精髓之一


简单的代码解释

需求 

有个接收者需要接收来自邮箱的信息,但之后可能需要接收来自其他信息交流软件的信息 

版本一

public class Email {

    public String message(){
        return "来自邮箱的信息";
    }
}

  

public class Person {

    public void receive(Email email){
        System.out.println(email.message());
    }
}

  

public class MainClass {
    public static void main(String[] args) {

        Person person = new Person();
        person.receive(new Email());

    }
}

UML类图

控制台运行结果

 这样看起来是接收了来自邮箱的信息 若今后有新的信息来源 就必须修改Person类这就违反开放封闭原则

改进版本

public interface Comunication {
    String message();
}

 

public class Email implements Comunication{

    public String message(){
        return "来自邮件的信息";
    }
}

  

public class WeChat implements Comunication{

    public  String message(){
        return "来自微信的信息";
    }
}

  

public class Person {

    public void receive(Comunication comunication){
        System.out.println(comunication.message());
    }

}

  

public class MainClass {

    public static void main(String[] args) {

        Person person = new Person();
        person.receive(new Email());
        person.receive(new WeChat());

    }
}

UML类图

 本来Person类依赖的是Emai这个类 现在依赖的是Comunication这个接口 依赖的是抽象 使后期的扩展和修改成为了可能


依赖传递的三种方式

1接口声明依赖对象

2.构造函数传递依赖对象

3.Setter方法传递依赖对象

原文地址:https://www.cnblogs.com/newbee0101/p/11711123.html