美文网首页
3 依赖倒置原则

3 依赖倒置原则

作者: 思无邪_1c6a | 来源:发表于2019-07-30 23:05 被阅读0次

依赖倒置原则

一、基本介绍

依赖倒置原则是指:

1)高层模块不应该依赖底层模块,二者都应该依赖其抽象

2)抽象不应该依赖细节,细节应该依赖抽象

3)中心思想是面向接口编程

4)依赖倒置原则是基于这样的设计理念:

相对于细节的多变性,抽象的东西要稳定。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。

5)使用接口或抽象类的目的是指定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

二、应用实例

完成Person接收消息的功能

1)方案1+分析说明

public class DependecyInversion1 {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new Email());
    }
}

class Email {
    public String getInfo() {
        return "电子邮件信息:hello";
    }
}
class Person {
    public void receive(Email email) {
        System.out.println(email.getInfo());
    }
}

分析:

  • 缺点:若获取的对象是微信、短信等等,则需新增类同时Person同时新增方法
  • 解决思路:引入抽象接口IReceiver表示接收者,Person类与接口IReceiver依赖。具体的接收范围Email、WeiXin等接收范围实现IReceiver接口。

2)方案2(依赖倒置)+分析

/**
 * 依赖倒置
 */
public class DependecyInversion1 {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new Email());
        person.receive(new WeiXin());
    }
}

// 定义接口
interface IReceiver {
    public String getInfo();
}

class Email implements IReceiver {
    @Override
    public String getInfo() {
        return "电子邮件信息:hello";
    }
}

class WeiXin implements IReceiver {
    @Override
    public String getInfo() {
        return "微信信息:hello";
    }

}

class Person {
    public void receive(IReceiver receiver) {
        System.out.println(receiver.getInfo());
    }
}

三、依赖关系传递的三种方式

1)接口传递

2)构造方法传递

3)set方法传递

/**
 * 依赖关系传递
 */
public class DependencyPass {
    public static void main(String[] args) {
        // 1.接口传递
        ChangHong changHong = new ChangHong();
        OpenAndClose1 openAndClose1 = new OpenAndClose1();
        openAndClose1.open(changHong);

        // 2.构造方法传递
        OpenAndClose2 openAndClose2 = new OpenAndClose2(changHong);
        openAndClose2.open();

        // 3.set方法传递
        OpenAndClose3 openAndClose3 = new OpenAndClose3();
        openAndClose3.setTv(changHong);
        openAndClose3.open();
    }
}

// 方式1:通过接口传递实现依赖
// 开关接口
interface IOpenAndClose1 {
    public void open(ITV tv);
}

// TV接口
interface ITV {
    public void play();
}

class ChangHong implements ITV {
    @Override
    public void play() {
        System.out.println("长虹电视机,打开");
    }
}

class OpenAndClose1 implements IOpenAndClose1 {
    @Override
    public void open(ITV tv) {
        tv.play();
    }
}

// 方式2:构造方法依赖传递
interface IOpenAndClose2 {
    public void open(); // 抽象方法
}

class OpenAndClose2 implements IOpenAndClose2 {
    public ITV tv; // 成员

    public OpenAndClose2(ITV tv) { // 构造器
        this.tv = tv;
    }
    @Override
    public void open() {
        this.tv.play();
    }
}

// 方式3: set方法传递
interface IOpenAndClose3 {
    public void open();
    public void setTv(ITV tv);
}

class OpenAndClose3 implements IOpenAndClose3 {
    private ITV tv;

    @Override
    public void setTv(ITV tv) {
        this.tv = tv;
    }

    @Override
    public void open() {
        this.tv.play();
    }
}

四、依赖倒置原则注意事项

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

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

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

相关文章

  • 依赖倒置原则

    依赖倒置原则 “依赖倒置原则(Dependence Inversion Principle,DIP)” 定义: 高...

  • 依赖倒置/好莱坞原则/控制反转

    # 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则: - 高层模块不应该依赖...

  • 第二周

    请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则 Dependency Inv...

  • 依赖倒置原则(DIP)

    依赖倒置原则定义 依赖倒置原则(Dependence Inversion Principle ,DIP)定义如下:...

  • 依赖倒置原则

    个人博客原文:依赖倒置原则 设计模式六大原则之三:依赖倒置原则。 简介 姓名 :依赖倒置原则 英文名 :Depen...

  • 架构师训练营第2周命题作业

    一.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 1.依赖倒置原则描述: 1.1. 高...

  • 框架设计[week 2]

    作业一: 1.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则: 高层模块不应...

  • 架构师训练营第二周作业

    1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 答:依赖倒置原则,英文缩写DIP,全...

  • 架构师训练营第2周作业 面向对象设计原则

    请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则? 依赖倒置原则的标准描述如下: 高层模块不应...

  • 六大设计原则-依赖倒置原则

    依赖倒置原则 Dependency Inversion Principle 简称DIP。 什么是依赖倒置原则 1....

网友评论

      本文标题:3 依赖倒置原则

      本文链接:https://www.haomeiwen.com/subject/wwqarctx.html