【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(一)

简介: 【设计模式】软件设计七大原则 ( 依赖倒置原则 | 代码示例 )(一)

文章目录

一、依赖倒置原则简介

二、面向实现编程代码示例 ( 反面示例 )

1、顾客类

2、测试类

三、依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 )

1、顾客类

2、商品接口

3、冰箱商品

4、电视商品

5、测试类

四、依赖倒置原则代码示例 ( 推荐示例 | 使用构造函数注入 IGood 实现类 )

1、顾客类

2、商品接口

3、冰箱商品

4、电视商品

5、测试类

五、依赖倒置原则代码示例 ( 推荐示例 | 使用 Setter 方法注入 IGood 实现类 )

1、顾客类

2、商品接口

3、冰箱商品

4、电视商品

5、测试类





一、依赖倒置原则简介


依赖倒置原则 : 高层模块 不应该 依赖 低层模块 , 二者都应该 依赖其抽象 ;

抽象 不应该 依赖细节 , 细节应该依赖抽象 ;


针对接口编程 , 不要针对实现编程 ;



通过抽象 , 包括使用 接口 或 抽象类 , 使个各类或模块之间 彼此独立 , 互不影响 , 从而实现模块之间的 松耦合 , 降低模块间的耦合性 ;


使用依赖倒置原则时的注意点 :


每个类都 尽量 实现自接口 或 继承抽象类 ;

尽量 避免从具体的类派生 ;

尽量 不要覆盖基类方法 ;


依赖倒置原则的优点 : 减少类之间的 耦合性 , 提高系统 稳定性 , 提高 代码可读性 , 可维护性 , 可 降低修改程序所造成的风险 ;






二、面向实现编程代码示例 ( 反面示例 )



1、顾客类


package dependenceinversion;
/**
 * 如果要增加一个新功能 , 就需要在该类中添加一个新方法
 *      这就是面向实现编程 , 该实现类需要经常进行修改
 *      扩展性很差
 *
 * 应用层的函数 , 是依赖于底层实现的 , 由于没有实现接口
 *      造成了应用层的测试类 , 直接依赖于本类
 *      应用层的模块属于高层模块
 *      本类属于低层模块
 *      根据依赖倒置原则 , 高层次的模块是不应该依赖于低层次的模块的
 */
public class Customer {
    public void buyFridge() {
        System.out.println("购买冰箱");
    }
    public void buyTelevision() {
        System.out.println("购买电视");
    }
}


2、测试类


package dependenceinversion;
public class Main {
    public static void main(String[] args) {
        Customer customer = new Customer();
        customer.buyFridge();
        customer.buyTelevision();
    }
}


执行结果 :

购买冰箱
购买电视







三、依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 )



1、顾客类


使用接口方法注入 IGood 实现类 ;


package dependenceinversion;
public class Customer {
    /**
     * 接口方法注入 IGood 实现类
     *      也可以使用构造函数 , 注入 IGood 实现类
     *
     * 此处就是面向接口编程
     *      如果添加了新的类 , 不需要修改本类
     *      只需要添加新的接口实现类即可
     *      面向接口编程 , 而不是面向本实现类
     *      对于高层模块来说 , 具体传入的参数是什么参数 ,
     *      交给高层模块选择
     *
     * 本类 与 具体的 IGood 接口 实现 是解耦的
     *      本类 与 应用层 客户端测试类 之间是解耦的
     *
     * 如果在添加一个新商品 , 直接定义一个新的接口实现类即可
     *
     * @param iGood
     */
    public void buy(IGood iGood) {
        iGood.buy();
    }
}



目录
相关文章
|
4天前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
4天前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
4天前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
4天前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
5天前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
设计模式-------------工厂模式之工厂方法模式(创建型)
|
5天前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
6天前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
6天前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
12天前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
5天前
|
设计模式 人工智能 达摩院
设计模式的基础问题之模板模式在软件开发中的优势是什么
设计模式的基础问题之模板模式在软件开发中的优势是什么