设计模式(3) --依赖倒转原则

简介: 设计模式(3) --依赖倒转原则

基本介绍


5d4c6812c8535adbb050f4ddf2e1bce8.png


案例


不按照依赖倒置原则的代码


//完成Person接收消息的功能
public class DependecyInversion {
  public static void main(String[] args) {
  Person person = new Person();
  person.receive(new Email());
  }
}
class Email {
  public String getInfo() {
  return "电子邮件信息: hello,world";
  }
}
class Person {
  public void receive(Email email ) {
  System.out.println(email.getInfo());
  }
}


方式1分析


简单,比较容易想到

如果我们获取的对象是 微信,短信等等,则新增类,同时Perons也要增加相应的接收方法

解决思路:引入一个抽象的接口IReceiver, 表示接收者, 这样Person类与接口IReceiver发生依赖

因为Email, WeiXin 等等属于接收的范围,他们各自实现IReceiver 接口就ok, 这样我们就符号依赖倒转原则`


使用依赖倒转完善上面案例


public class DependecyInversion {
  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 {
  public String getInfo() {
  return "电子邮件信息: hello,world";
  }
}
//增加微信
class WeiXin implements IReceiver {
  public String getInfo() {
  return "微信信息: hello,ok";
  }
}
//方式2
class Person {
  //这里我们是对接口的依赖
  public void receive(IReceiver receiver ) {
  System.out.println(receiver.getInfo());
  }
}


依赖关系传递的三种方式


1dc618a0ed9580ce8bfa6facb208c08f.png

上面之前的那个案例就是接口传递的方式。


下面再分别举例说明这3个方式:


以使用某电视机观看为案例


方式1:接口传递依赖


开关的接口


interface IOpenAndClose {
  public void open(ITV tv); //抽象方法,接收接口
}


电视接口


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

电视实现类–长虹电视

class ChangHong implements ITV {
    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("长虹电视机,打开");
    }
}

使用长虹电视观看节目


class OpenAndClose implements IOpenAndClose {
    public void open(ITV tv) {
        tv.play();
    }
}


测试


public static void main(String[] args) {
        // TODO Auto-generated method stub
        ChangHong changHong = new ChangHong();
  OpenAndClose openAndClose = new OpenAndClose();
  openAndClose.open(changHong);
  }



88b9988b40447cb37c7e3c492d49867f.png


方式2:通过构造方法依赖传递


1dc618a0ed9580ce8bfa6facb208c08f.png

测试

5d4c6812c8535adbb050f4ddf2e1bce8.png


方式3通过setter方法传递:


46a9d80a6e05e4e3b19d57a0ee70bcdf.png

测试:


66ba272a0bfc97be54a5fa679e3d5482.png


相关文章
|
设计模式 Java 数据库
Java设计模式七大原则-依赖倒转原则
Java设计模式七大原则-依赖倒转原则
165 0
|
设计模式 Java
设计模式七大原则——依赖倒转原则
设计模式七大原则——依赖倒转原则
设计模式七大原则——依赖倒转原则
|
设计模式
设计模式(五)之依赖倒转原则
依赖倒置原则的包含如下的三层含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象、 抽象不应该依赖细节、 细节应该依赖抽象。
208 0
设计模式(五)之依赖倒转原则
|
设计模式 Java
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
【Java设计模式】今天终于弄懂了依赖倒转原则和依赖关系传递的三种方式(代码详解)
设计模式:单一职责原则,开放封闭原则,依赖倒转原则,理氏代换原则
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 单一职责原则: 按照大话设计模式的解读,所谓单一职责原则是指:就一个类而言,应该仅有一个引起它变化的原因! 如果一个类承担的职责过多,就等于把这些职责耦合在一起,这无形中增加了设计的耦合度。
1003 0
|
设计模式 测试技术
|
5月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
150 16
|
5月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
149 0
|
5月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
138 0
|
5月前
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
115 0

热门文章

最新文章