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

设计模式原则:依赖倒置原则

作者头像
运维开发王义杰
发布2023-08-10 14:43:32
1500
发布2023-08-10 14:43:32
举报

依赖倒置原则

依赖倒置原则表示高层模块不应该依赖低层模块,两者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。也就是说,要针对接口编程,而不是针对实现编程。

依赖倒置原则是面向对象设计的重要原则之一,它体现了面向对象的思想和封装的特性。如果一个软件能够遵循依赖倒置原则,那么它就具有以下两个优点:

  • 降低了类之间的耦合性,提高了系统的稳定性。
  • 提高了代码的可读性和可维护性,以及扩展性。

举个例子,假设我们有一个电脑类 Computer,它有一个方法 work(),表示电脑可以工作。然后我们定义了一个键盘类 Keyboard 和一个鼠标类 Mouse 来作为电脑的组件。Computer 类依赖于 Keyboard 类和 Mouse 类,代码如下:

代码语言:javascript
复制
class Keyboard {
    public void input() {
        System.out.println("键盘输入");
    }
}

class Mouse {
    public void click() {
        System.out.println("鼠标点击");
    }
}

class Computer {
    private Keyboard keyboard;
    private Mouse mouse;

    public Computer(Keyboard keyboard, Mouse mouse) {
        this.keyboard = keyboard;
        this.mouse = mouse;
    }

    public void work() {
        keyboard.input();
        mouse.click();
        System.out.println("电脑工作");
    }
}

这个类违反了依赖倒置原则,因为它直接依赖于具体的实现类,而不是抽象的接口。这样的设计有以下几个缺点:

  • 类之间的耦合度高,如果 Keyboard 类或者 Mouse 类发生变化,就需要修改 Computer 类的代码。
  • 代码的可读性和可维护性差,因为 Computer 类暴露了太多的细节信息。
  • 代码的扩展性差,如果我们想要增加新的组件,比如显示器、音箱等,就需要修改 Computer 类的代码。

为了遵循依赖倒置原则,我们应该将 Keyboard 类和 Mouse 类设计成实现一个共同的接口 Component。然后,Computer 类只依赖于 Component 接口,而不依赖于具体的实现类。这样,在程序中可以将任何实现了 Component 接口的对象作为电脑的组件,而不改变 Computer 类的逻辑。代码如下:

代码语言:javascript
复制
interface Component {
    public void work();
}

class Keyboard implements Component {
    @Override
    public void work() {
        System.out.println("键盘输入");
    }
}

class Mouse implements Component {
    @Override
    public void work() {
        System.out.println("鼠标点击");
    }
}

// 其他组件类型的实现类省略

class Computer {
    private List<Component> components;

    public Computer(List<Component> components) {
        this.components = components;
    }

    public void work() {
        for (Component component : components) {
            component.work();
        }
        System.out.println("电脑工作");
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 依赖倒置原则
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档