前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java设计模式:(1)设计模式七大设计原则-依赖倒转原则

Java设计模式:(1)设计模式七大设计原则-依赖倒转原则

作者头像
桑鱼
发布2020-03-17 15:12:24
3910
发布2020-03-17 15:12:24
举报

基本介绍

1)依赖倒转原则基于这样的设计理念:相对于细节的多变形,抽象的东西要稳定的多,以抽象为基础搭建的架构比以细节为基础的架构要稳定的多

在Java中,抽象指的是接口或抽象类,细节就是具体的实现类

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

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

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

举个例子1

代码语言:javascript
复制
public class Inversion01 {
    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中,类Person 中recevie()接口一个Email的对象的参数来接收消息,如果这个时候我们获取的对象增加了其他的方式,微信、短信,Persons也要增加接口方法

举个例子2

代码语言:javascript
复制
public class Inversion02 {
    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 Email ";
    }
}

class WeiXin implements IReceiver{
    public String getInfo(){
        return "Hello WeiXin ";
    }
}

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

// 运行结果
Hello Email 
Hello WeiXin 

分析:在例子2中,引入了一个抽象的接口IReceiver,表示接收者,Person类与IReceiver类发生依赖,然后Email和WeiXin各自实现IReceiver接口。这样就事项了依赖倒转原则

依赖关系传递的三种关系和应用案例

1. 通过接口传递实现依赖
代码语言:javascript
复制
public class Inversion03 {

    public static void main(String[] args) {
        OpenAndClose openAndClose = new OpenAndClose();
        openAndClose.open(new ChangHong());
    }
}

interface IOpenAndClose{
  public void open(ITV tv);
}

interface ITV{
  public void play();
}

class ChangHong implements ITV{
  public void play(){
    System.out.println("ChangHong is play");
  }
}

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

// 运行结果
ChangHong is play
2. 通过构造方法依赖传递
代码语言:javascript
复制
public class Inversion04 {
    public static void main(String[] args) {
        OpenAndClass openAndClass = new OpenAndClass(new ChangHong());
        openAndClass.open();
    }
}

interface IOpenAndClose{
    public void open();
}

interface ITV{
    public void play();
}

class OpenAndClass implements IOpenAndClose{
    public ITV tv;
    public OpenAndClass(ITV tv){
        this.tv = tv;
    }
    public void open(){
        this.tv.play();
    }
}

class ChangHong implements ITV{
    public void play(){
        System.out.println("ChangHong is play");
    }
}

// 运行结果
ChangHong is play
3. 通过setter方法传递
代码语言:javascript
复制
public class Inversion05 {
    public static void main(String[] args) {
        OpenAndClose openAndClose = new OpenAndClose();
        openAndClose.setTv(new ChangHong());
        openAndClose.open();
    }
}

interface IOpenAndClose{
    public void open();
    public void setTv(ITV tv);
}

interface ITV{
    public void play();
}

class OpenAndClose implements IOpenAndClose{
    private ITV tv;
    public void setTv(ITV tv){
        this.tv = tv;
    }

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

class ChangHong implements ITV{
    public void play(){
        System.out.println("ChangHong is play");
    }
}
// 运行结果
ChangHong is play
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
  • 依赖关系传递的三种关系和应用案例
    • 1. 通过接口传递实现依赖
      • 2. 通过构造方法依赖传递
        • 3. 通过setter方法传递
        相关产品与服务
        短信
        腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档