iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java设计模式之依赖倒转原则精解
  • 575
分享到

Java设计模式之依赖倒转原则精解

2024-04-02 19:04:59 575人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1.什么是依赖倒转原则?2.代码案例3.依赖关系传递的三种方式和案例举例3.1 接口传递3.2 构造方法传递3.3 setter方法传递4.依赖倒转原则总结1.什么是依赖倒转原则

1.什么是依赖倒转原则?

  • 高层模块不应该依赖低层模块,二者都应该依赖其抽象。
  • 抽象不应该依赖细节,细节应该依赖抽象。
  • 依赖倒转 (倒置) 的中心思想是面向接口编程
  • 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在Java中,抽象指的是接口或抽象类,细节就是具体的实现类。
  • 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。

2.代码案例


package com.szh.principle.inversion;
 

class Email {
    public String getInfo() {
        return "电子邮件信息: hello,world";
    }
}
 
// 完成Person接收消息的功能
// 方式1分析
//   1. 简单,比较容易想到
//   2. 如果我们获取的对象是 微信,短信等等,则新增类,同时Person也要增加相应的接收方法
//   3. 解决思路:引入一个抽象的接口IReceiver, 表示接收者, 这样Person类与接口IReceiver发生依赖
//   因为Email, WeiXin 等等属于接收的范围,他们各自实现IReceiver 接口就ok, 这样我们就符号依赖倒转原则
class Person {
    public void receive(Email email ) {
        System.out.println(email.getInfo());
    }
}
 
public class DependencyInversion {
    public static void main(String[] args) {
        Person person = new Person();
        person.receive(new Email());
    }
}

我们可以根据依赖倒转原则对上面的代码做一个改进,如下:???


package com.szh.principle.inversion.improve;
 

//定义接口
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());
    }
}
 
public class DependencyInversion {
    public static void main(String[] args) {
        //客户端无需改变
        Person person = new Person();
        person.receive(new Email());
        person.receive(new WeiXin());
    }
}

3.依赖关系传递的三种方式和案例举例

3.1 接口传递


package com.szh.principle.inversion.improve;
 

 interface IOpenAndClose1 {
    public void open(ITV1 tv); //抽象方法,接收接口
 }
 
 interface ITV1 { //ITV接口
    public void play();
 }
 
class OpenAndClose1 implements IOpenAndClose1 {
     @Override
     public void open(ITV1 tv){
         tv.play();
     }
}
 
 class ChangHong1 implements ITV1 {
	@Override
	public void play() {
		System.out.println("长虹电视机,打开");
	}
 }
 
public class DependencyPass1 {
    public static void main(String[] args) {
        ChangHong1 changHong = new ChangHong1();
		OpenAndClose1 openAndClose = new OpenAndClose1();
		openAndClose.open(changHong);
    }
}

3.2 构造方法传递


package com.szh.principle.inversion.improve;
 

 interface IOpenAndClose2 {
    public void open(); //抽象方法
 }
 
 interface ITV2 { //ITV接口
    public void play();
 }
 
 class OpenAndClose2 implements IOpenAndClose2 {
    public ITV2 tv; //成员
 
    public OpenAndClose2(ITV2 tv){ //构造器
        this.tv = tv;
    }
 
    public void open(){
        this.tv.play();
    }
 }
 
class ChangHong2 implements ITV2 {
    public void play() {
        System.out.println("长虹电视机,打开");
    }
}
 
public class DependencyPass2 {
    public static void main(String[] args) {
        ChangHong2 changHong = new ChangHong2();
        //通过构造器进行依赖传递
		OpenAndClose2 openAndClose = new OpenAndClose2(changHong);
		openAndClose.open();
    }
}

3.3 setter方法传递


package com.szh.principle.inversion.improve;
 

interface IOpenAndClose3 {
    public void open(); // 抽象方法
    public void setTv(ITV3 tv);
}
 
interface ITV3 { // ITV接口
    public void play();
}
 
class OpenAndClose3 implements IOpenAndClose3 {
    private ITV3 tv;
 
    public void setTv(ITV3 tv) {
        this.tv = tv;
    }
 
    public void open() {
        this.tv.play();
    }
}
 
class ChangHong3 implements ITV3 {
    public void play() {
        System.out.println("长虹电视机,打开");
    }
}
 
public class DependencyPass3 {
    public static void main(String[] args) {
        ChangHong3 changHong = new ChangHong3();
        //通过setter方法进行依赖传递
        OpenAndClose3 openAndClose = new OpenAndClose3();
        openAndClose.setTv(changHong);
        openAndClose.open();
    }
}

4.依赖倒转原则总结

  • 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
  • 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
  • 继承时遵循里氏替换原则。(我们后面再说)

到此这篇关于Java设计模式之依赖倒转原则精解的文章就介绍到这了,更多相关Java 依赖倒转原则内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java设计模式之依赖倒转原则精解

本文链接: https://www.lsjlt.com/news/138415.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java设计模式之依赖倒转原则精解
    目录1.什么是依赖倒转原则?2.代码案例3.依赖关系传递的三种方式和案例举例3.1 接口传递3.2 构造方法传递3.3 setter方法传递4.依赖倒转原则总结1.什么是依赖倒转原则...
    99+
    2024-04-02
  • Java设计模式七大原则之依赖倒置原则详解
    目录定义案例需求方案一方案二对比分析总结定义 依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称DIP原则,即:上层模块不应该依赖底...
    99+
    2024-04-02
  • java设计模式的依赖倒置原则怎么实现
    这篇文章主要讲解了“java设计模式的依赖倒置原则怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java设计模式的依赖倒置原则怎么实现”吧!依赖倒置原则(Dependence Inv...
    99+
    2023-06-17
  • C#实现六大设计原则之依赖倒置原则
    依赖倒置原则(DIP)定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来: 类A直接依赖类B,假如要将类A改为依赖类C,则必须...
    99+
    2024-04-02
  • Java设计模式之开闭原则精解
    目录1.什么是开闭原则?2.违反Ocp代码案例3.遵守Ocp代码案例1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础、最重要的设计原则。一个...
    99+
    2024-04-02
  • Java中依赖倒转原则是什么
    小编给大家分享一下Java中依赖倒转原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是依赖倒转原则?高层模块不应该依赖低层模块,二者都应该依赖其抽...
    99+
    2023-06-29
  • java依赖倒转原则怎么实现
    本文小编为大家详细介绍“java依赖倒转原则怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“java依赖倒转原则怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.什么是依赖倒转原则?高层模块不应该...
    99+
    2023-06-29
  • Java设计模式之迪米特原则精解
    目录1.什么是迪米特原则?2.违反迪米特原则代码案例3.遵守迪米特原则代码案例4.迪米特原则的注意事项1.什么是迪米特原则? 一个对象应该对其他对象保持最少的了解。 ...
    99+
    2024-04-02
  • java面向对象设计原则之单一职责与依赖倒置原则详解
    目录单一职责概念 实现 拓展 依赖倒置原则概念 示例 拓展 单一职责概念 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。交杂不清的职责将使...
    99+
    2024-04-02
  • Java设计模式之接口隔离原则精解
    1.什么是接口隔离原则? 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口范围上。 2.对应代码 上面这张图呢,就违反了接口隔离原则。它对应的代码如下:...
    99+
    2024-04-02
  • Java设计模式之里氏替换原则精解
    1.什么是里氏替换原则? 我们都知道,在面向对象编程中有三大特性(封装、继承、多态),在这里我们来说 继承 这个东西。 继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设...
    99+
    2024-04-02
  • Java设计模式之单一职责原则精解
    1.什么是单一职责原则? 首先我们可以对某个类来说,即一个类应该只负责一项职责。如类A负责两个不同职责: 职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要...
    99+
    2024-04-02
  • 详解PHP设计模式之依赖注入模式
    目的 实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码 用法 DatabaseConfiguration 被注入 DatabaseConnection 并获取所需的 $co...
    99+
    2024-04-02
  • java的依赖倒置原则你了解多少
    目录依赖倒置原则案例:背景:1.面向实现编程2.面向接口编程(简单版)总结依赖倒置原则 什么是依赖倒置原则: 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细...
    99+
    2024-04-02
  • Java依赖倒转原则_动力节点Java学院整理
    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类...
    99+
    2023-05-31
    java 依赖倒转 ava
  • 详解java设计模式之六大原则
    目录一、单一职责原则1、单一职责定义2、单一职责优点3、案例说明4、自己理解二、里氏代换原则1、定义2、案例说明3、自己理解三、接口隔离原则1、定义2、案例说明3、自己理解四、依赖倒...
    99+
    2024-04-02
  • Java设计模式七大原则之开闭原则详解
    目录定义案例需求方案一执行结果方案二执行结果对比分析总结定义 开闭原则( Open Close Principle ),又称为OCP原则,即一个软件实体如类,模块和函数应该对扩展开放...
    99+
    2024-04-02
  • Java 设计模式原则之迪米特法则详解
    定义 一个对象应该对其他对象保持最少的了解。 问题由来 类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 解决方案 尽量降低类与类之间的耦合。 自从我...
    99+
    2024-04-02
  • 浅谈Java设计模式之七大设计原则
    目录前言一、单一职责原则(SingleResponsibilityPrinciple,SRP)二、开闭原则(Open-ClosedPrinciple,OCP)三、里氏代换原则(Lis...
    99+
    2024-04-02
  • Java设计模式七大原则之里氏替换原则详解
    目录定义案例需求方案一方案二对比分析总结定义 里氏替换原则(Liskov Substitution Principle,LSP),官方定义如下: 如果对每一个类型为S的对象o1,都有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作