设计模式七大原则之依赖倒转

什么是依赖倒转原则?

依赖倒转原则是基于这样的理念: 相对于细节的多变性, 抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中, 抽象值得是接口或抽象类,细节就是具体的实现类。其核心的思想就是面向接口编程
应当遵循高层模块不应该依赖底层模块, 二者都应该是依赖其抽象。
抽象不应该依赖细节,细节应该依赖于抽象。

为什么要设计依赖倒转原则?

(1) 制定规范
(2) 利于程序扩展和优化
(3) 代码阅读性更强

案例演示01 - 非依赖倒转

有一个Person类,其中有一个用来接收信息的receive()方法
public class Normal {
    public static void main(String[] args) {
        /***
         * 没有使用依赖倒转原则,方案比较简单
         * 此处只有一个信息来源就是邮件,那么后续如果有更多的其他信息来源,例如: 微信、短信、QQ等。则新增类时,同时Person也需要跟着改变,
         * 增加相应的接收方法。
         */
        Person person = new Person();
        person.receive(new Email());
    }
}

class Person {
    public void receive(Email email) {
        email.getInfo();
    }
}

class Email {
    public String getInfo() {
        return "电子邮件消息: test";
    }
}
这种方案没有采用依赖倒转,模式比较简单。但是不利于后期程序的扩展。因为目前只有一种信息来源就是邮件, 假设后期有多种信息来源,例如: 微信、短信、QQ等。那么就要对于Person类增加相对应的代码,从而导致代码变得冗长,可读性和维护性都会降低

案例演示02 - 依赖倒转

我们可以基于多种信息来源的方式抽象一个接口出来,在接口中定义一个getInfo() 方法。具体的信息来源类都实现这个接口。在需要获取信息的时候依赖于接口,这样既有利于代码的扩展性,也同时使用到了依赖倒转原则
public class DepencyVersion {
    public static void main(String[] args) {
        Person person = new Person();
        person.getInfo(new Wechat());
        person.getInfo(new QQ());
        person.getInfo(new Sms());
        person.getInfo(new Email());
    }
}


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

/***
 * 所有信息来源需要实现的接口
 */
interface IReceiver {
    String getInfo();
}

class Wechat implements IReceiver {
    @Override
    public String getInfo() {
        return "微信消息: test";
    }
}

class QQ implements IReceiver {
    @Override
    public String getInfo() {
        return "QQ消息: test";
    }
}

class Sms implements IReceiver {
    @Override
    public String getInfo() {
        return "短信消息: test";
    }
}

class Email implements IReceiver {
    @Override
    public String getInfo() {
        return "邮件消息: test";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值