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

面向对象设计原则-依赖倒置原则示例

原创
作者头像
堕落飞鸟
发布2023-05-05 14:33:20
1070
发布2023-05-05 14:33:20
举报
文章被收录于专栏:飞鸟的专栏

假设我们有一个Report类,它用于生成报告。我们可以定义一个IReportGenerator接口来定义Report类的依赖关系:

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

然后,我们可以定义一个HtmlReportGenerator类和一个PdfReportGenerator类,它们都实现了IReportGenerator接口:

代码语言:javascript
复制
public class HtmlReportGenerator implements IReportGenerator {
    public void generate() {
        // 生成HTML格式的报告
    }
}

public class PdfReportGenerator implements IReportGenerator {
    public void generate() {
        // 生成PDF格式的报告
    }
}

现在,我们可以定义一个ReportService类,它依赖于IReportGenerator接口:

代码语言:javascript
复制
public class ReportService {
    private IReportGenerator reportGenerator;

    public ReportService(IReportGenerator reportGenerator) {
        this.reportGenerator = reportGenerator;
    }

    public void generateReport() {
        reportGenerator.generate();
    }
}

在上面的代码中,ReportService类依赖于IReportGenerator接口,而IReportGenerator的具体实现通过构造函数注入到ReportService类中。这样,我们就可以在运行时动态地传递IReportGenerator的具体实现,而不需要在ReportService类中硬编码依赖关系。

现在,我们可以在客户端代码中创建ReportService类的实例,并将HtmlReportGenerator或PdfReportGenerator的实例作为参数传递进去:

代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        IReportGenerator reportGenerator = new HtmlReportGenerator();
        ReportService reportService = new ReportService(reportGenerator);
        reportService.generateReport();
    }
}

在上面的代码中,我们创建了一个HtmlReportGenerator的实例,并将其作为参数传递给ReportService的构造函数。这样,当我们调用ReportService的generateReport方法时,它将使用HtmlReportGenerator来生成报告。

这个例子说明了如何使用DIP原则来实现松耦合的依赖关系。通过将依赖关系定义为抽象接口,我们可以避免类之间的紧密耦合,并支持在运行时动态地传递具体实现。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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