千家信息网

java依赖倒转原则怎么实现

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本文小编为大家详细介绍"java依赖倒转原则怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"java依赖倒转原则怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
千家信息网最后更新 2025年01月19日java依赖倒转原则怎么实现

本文小编为大家详细介绍"java依赖倒转原则怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"java依赖倒转原则怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

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

    1. 高层模块不应该依赖低层模块,二者都应该依赖其抽象。

    2. 抽象不应该依赖细节,细节应该依赖抽象。

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

    4. 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在Java中,抽象指的是接口或抽象类,细节就是具体的实现类。

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

    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";    }}//方式2class 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;/** * 方式1: 通过接口传递实现依赖 */ 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;/** * 方式2: 通过构造方法依赖传递 */ 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; /** * 方式3: 通过setter方法传递 */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();    }}

    读到这里,这篇"java依赖倒转原则怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

    接口 方法 原则 细节 方式 信息 文章 电视 电视机 长虹 代码 内容 基础 思路 架构 案例 模块 电子 电子邮件 邮件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 补丁服务器如何设置 临邑软件开发自学教程哪家好 魔兽世界怀旧服狮心服务器排队 数据库处理对电脑的要求 西安电脑软件开发有哪些公司 汽车网络安全公司排名 软件直播软件开发 异地文件服务器 电脑网络安全模式怎么连接网络 服务器组装需要什么配置 教育类型网站软件开发 我的世界网易端游服务器光影 网络安全中完整性的概念 国家网络安全的启示 爆裂魔女服务器维护需要多久 北京网络技术职业学院简介 架设服务器视频教程 服务器两块硬盘都坏了 steam 选择服务器 电脑服务器需要注意什么 福建搭建云空间部署云空间服务器 功能软件开发编程 交通银行西安软件开发中心地址 地理位置交友软件开发 国别数据库 台北软件开发工资多少 登山赛车2服务器崩溃补偿码 绵阳市公安局网络安全支队 亚信金融智能网络安全 数据库备份软件 开源
    0