• Java学习 --- 设计模式七大原则的依赖倒转原则


    目录

    一、依赖倒转原则

    二、依赖倒转原则参考代码

    二、依赖倒转原则注意事项


    一、依赖倒转原则

    1、高层模块不应该依赖低层模块,二者都应该依赖其抽象。

    2、抽象不应该依赖细节,细节应该依赖抽象。

    3、依赖倒转的中心思想是面向接口编程

    4、依赖倒转原则的设计理念:相对于细节的多变性,抽象的东西相对稳定。以抽象为基础搭建的架构比以细节搭建的架构要稳定的多。在Java中,抽象是指接口和抽象类,细节就是具体的实现类。

    5、使用接口或抽象类的目的是制定好规范,不涉及具体的操作,把展现细节的操作交给它们的实现类去完成。

    二、依赖倒转原则参考代码

    不使用依赖倒转原则代码示例:

    1. public class Depend {
    2. public static void main(String[] args) {
    3. Person person = new Person();
    4. person.receive(new Email());
    5. }
    6. }
    7. class Email{
    8. public String getInfo(){
    9. return "邮件信息:你好,tom";
    10. }
    11. }
    12. /**
    13. * 1、这样做简单,容易
    14. * 2、当获取的对象发生变化时,就要增加新的类,Person类也要增加新的方法。
    15. * 解决方法:引入一个抽象的接口IReceiver,表示接受者,Person类与IReceiver发生依赖
    16. * Email类等各自实现IReceiver即可。
    17. */
    18. class Person{
    19. public void receive(Email email){
    20. System.out.println(email.getInfo());
    21. }
    22. }

    通过接口的方式实现依赖倒置示例代码:

    1. public class Depend {
    2. public static void main(String[] args) {
    3. Person person = new Person();
    4. person.receive(new Email());
    5. person.receive(new Note());
    6. }
    7. }
    8. //定义接口
    9. interface IReceiver{
    10. String getInfo();
    11. }
    12. class Email implements IReceiver{
    13. public String getInfo(){
    14. return "邮件信息:你好,tom";
    15. }
    16. }
    17. class Note implements IReceiver{
    18. @Override
    19. public String getInfo() {
    20. return "短信信息:你好,jack";
    21. }
    22. }
    23. class Person{
    24. public void receive(IReceiver iReceiver){
    25. System.out.println(iReceiver.getInfo());
    26. }
    27. }

    通过构造方法的方式实现依赖倒置示例代码:

    1. public class Depend {
    2. public static void main(String[] args) {
    3. Person person = new Person(new Email());
    4. String info = person.getInfo();
    5. System.out.println(info);
    6. }
    7. }
    8. //定义接口
    9. interface IReceiver{
    10. String getInfo();
    11. }
    12. interface Content {
    13. String open();
    14. }
    15. class Person implements IReceiver{
    16. public Content content;
    17. public Person(Content content){
    18. this.content = content;
    19. }
    20. @Override
    21. public String getInfo() {
    22. return this.content.open();
    23. }
    24. }
    25. class Email implements Content{
    26. @Override
    27. public String open() {
    28. return "邮件信息:你好,tom";
    29. }
    30. }

    通过setter方法的方式实现依赖倒置示例代码:

    1. public class Depend {
    2. public static void main(String[] args) {
    3. Email email = new Email();
    4. Person person = new Person();
    5. person.setContent(email);
    6. String info = person.getInfo();
    7. System.out.println(info);
    8. }
    9. }
    10. //定义接口
    11. interface IReceiver{
    12. String getInfo();
    13. void setContent(Content content);
    14. }
    15. interface Content {
    16. String open();
    17. }
    18. class Person implements IReceiver{
    19. public Content content;
    20. public void setContent(Content content){
    21. this.content = content;
    22. }
    23. @Override
    24. public String getInfo() {
    25. return this.content.open();
    26. }
    27. }
    28. class Email implements Content {
    29. @Override
    30. public String open() {
    31. return "邮件信息:你好,tom";
    32. }
    33. }

    二、依赖倒转原则注意事项

    1、低层模块尽量都要有抽象类或接口,或者两者都有,程序的稳定性更好。

    2、变量的声明类型尽量是抽象类或接口,这样做会使变量引用和实际对象间就会有一个缓冲层,有利于程序的扩展和优化。

    3、继承时遵循里氏替换原则。

  • 相关阅读:
    docker 安装mysql
    SPA项目之主页面--数据表格的增删改查
    【Android】相对布局(RelativeLayout)最全解析
    Spacewalk
    Java】实现图片验证码2.0【详细代码】
    JavaScript查找最长的公共前缀
    [附源码]Python计算机毕业设计Django动物保护协会网站
    Django应用部署实战:从开发到生产,全程解析
    Spring中子线程获取RequestAttributes
    使用mysql语句进行内连接
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/126017739