设计模式原则之依赖倒置原则
依赖倒置原则
依赖倒置原则(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方法传递依赖对象