软件工程设计原理依赖倒置原则 ,具体实现及JAVA代码举例

简介: 【4月更文挑战第5天】在软件工程中,依赖倒置原则(Dependency Inversion Principle, DIP)是一项重要的设计原则,它是SOLID原则中的一个组成部分。这个原则主张高层模块不应该依赖于低层模块,而是应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这种设计方法有助于降低代码间的耦合度,增强系统的灵活性和可维护性

在软件工程中,依赖倒置原则(Dependency Inversion Principle, DIP)是一项重要的设计原则,它是SOLID原则中的一个组成部分。这个原则主张高层模块不应该依赖于低层模块,而是应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这种设计方法有助于降低代码间的耦合度,增强系统的灵活性和可维护性。

具体实现步骤

  1. 定义抽象:识别系统中的关键功能,并为这些功能定义接口或抽象类。
  2. 低层模块实现抽象:低层模块(如数据访问层、具体业务逻辑等)实现上述接口或继承抽象类。
  3. 高层模块依赖抽象:高层模块(如业务逻辑层或表示层)依赖于抽象接口或类,而不是低层模块的具体实现。
  4. 依赖注入:通常使用依赖注入(DI)技术来动态地为高层模块提供其依赖的低层模块实现。

Java代码举例

假设我们正在开发一个应用程序,其中需要一个模块来处理支付。我们可以使用依赖倒置原则来设计这个功能。

步骤1: 定义抽象

java复制代码

public interface PaymentGateway {
    void processPayment(String paymentDetails);
}

这个接口代表支付处理的抽象。

步骤2: 低层模块实现抽象

java复制代码

public class PaypalPaymentGateway implements PaymentGateway {
    @Override
    public void processPayment(String paymentDetails) {
        System.out.println("Processing payment through PayPal: " + paymentDetails);
    }
}

public class CreditCardPaymentGateway implements PaymentGateway {
    @Override
    public void processPayment(String paymentDetails) {
        System.out.println("Processing payment with Credit Card: " + paymentDetails);
    }
}

这些类代表了不同的支付方式。

步骤3: 高层模块依赖抽象

java复制代码

public class PaymentService {
    private PaymentGateway paymentGateway;

    public PaymentService(PaymentGateway paymentGateway) {
        this.paymentGateway = paymentGateway;
    }

    public void processPayment(String paymentDetails) {
        paymentGateway.processPayment(paymentDetails);
    }
}

PaymentService是一个高层模块,依赖于PaymentGateway接口。

步骤4: 在应用程序中使用

java复制代码

public class Application {
    public static void main(String[] args) {
        PaymentGateway paypalGateway = new PaypalPaymentGateway();
        PaymentService paymentService = new PaymentService(paypalGateway);
        paymentService.processPayment("100 USD");

        PaymentGateway creditCardGateway = new CreditCardPaymentGateway();
        paymentService = new PaymentService(creditCardGateway);
        paymentService.processPayment("200 USD");
    }
}

在这个例子中,PaymentService不直接依赖于具体的支付方式实现,而是依赖于PaymentGateway接口。这使得PaymentService能够适用于多种支付方式,只需更换具体的PaymentGateway实现即可,从而体现了依赖倒置原则的应用。

相关文章
|
1天前
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
|
3天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
19 2
|
5天前
|
SQL Java 数据库
java代码中调用dao层查询接口,代码没有返回数据,打印出的sql查出了数据
java代码中调用dao层查询接口,代码没有返回数据,打印出的sql查出了数据
10 1
|
5天前
|
安全 Java 开发者
Java编程:深入探索其原理、特性与实战代码
Java编程:深入探索其原理、特性与实战代码
10 1
|
6天前
|
存储 算法 Java
滚雪球学Java(20):Java泛型与枚举:提升代码灵活性与可读性
【4月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
19 1
滚雪球学Java(20):Java泛型与枚举:提升代码灵活性与可读性
|
9天前
|
Java 测试技术 持续交付
云效产品使用常见问题之通过流水线构建的java代码,在docker文件里拿到失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
10天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
25 11
|
12天前
|
Java 调度
《Java 多线程实战系列》- 01 基本概念与底层原理
《Java 多线程实战系列》- 01 基本概念与底层原理
14 0
|
3天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
1天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点