.依赖倒置原则

  1. 定义
    高层模块不应该依赖于底层模块,而应该依赖于抽象。抽象不应依赖于细节,细节应依赖于抽象。
  2. 解决的问题
    类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。因此我们需要将依赖的方向进行重新规划,像下面这样:

    我们将接口与实现相分离,应用与细节相分离,接口层提供我们业务层所需要的接口方法,实现层对接口的具体方法进行实现,高层业务逻辑不关心接口实现的具体细节,它只对接口进行调用,从而降低了类之间的耦合性,增加了代码的可读性,降低了后续维护的成本。
    实例:
    定义一个武汉店类,该类有个sell()方法,访问该方法可以显示周黑鸭
class wuhanshop
{public:void sell(){cout << "zhouheiya" << endl;}
};

定义一个顾客类,顾客类中有gouwu()方法,通过往该方法中传具体的商店来进行购物

class guke
{public:void gouwu(wuhanshop ws){ws.sell();}
};

下面开始购物

void main()
{guke mike;wuhanshop ws;mike.gouwu(ws);
}

如果此时顾客mike想去其他商店,比如福建商店进行购物买烤老鼠

class fujianshop
{public:void sell(){cout << "kaolaoshu" << endl;}
};

此时main函数换成

void main()
{guke mike;fujianshop fs;mike.gouwu(fs);
}

此时guke类也要修改

class guke
{public:void gouwu(fujianshop fs){fs.sell();}
};

假如以后需求换成湖南店呢?换成上海店呢?还要不断地修改 guke类,这显然不是好的设计。原因就是 guke类与 具体的shop类 之间的耦合性太高了,必须降低他们之间的耦合度才行。耦合度高的影响就是一旦商店改变,顾客就需要改变。

强耦合关系:任意一方的改变都将导致双方发生改变

因此我们在guke类与具体的shop类中提供一个抽象类shop

#include<iostream>
using namespace std;class shop
{public:virtual void sell() = 0;
};
class guke
{public:void gouwu(shop* shop){shop->sell();}
};
class wuhanshop:public shop
{public:void sell(){cout << "zhouheiya" << endl;}
};
class fujianshop :public shop
{public:void sell(){cout << "kaolaoshu" << endl;}
};
void main()
{guke mike;wuhanshop ws;fujianshop fs;mike.gouwu(&ws);mike.gouwu(&fs);
}

将guke类中的参数设为指向抽象类shop的指针,具体的商店继承该抽象shop,因为父类指针可以指向子类对象,因此在购物时将具体商店子类对象的地址传进去,而不需要改变guke类


细节指具体的实现类,抽象指接口或者抽象类
在软件设计中,具体类会随着业务的变化有很多种,beijing,guangzhou…各种商店类,然而其抽象类shop始终是稳定的。以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定的多。使用抽象类的目的是制定好规范和契约,将展现细节的任务交给他们的实现类。

C++ 依赖倒置原则相关推荐

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  2. 设计模式六大原则:依赖倒置原则、为什么、多例子、分析例子、总结

    1. 依赖倒置原则的定义 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念: 相对于细节的多变 ...

  3. 6大设计原则之依赖倒置原则

    依赖倒置原则: 包含三层含义: 高层模块不应该依赖低层模块,二者应该依赖抽象 抽象不应该依赖细节 细节应该依赖抽象 再精简些就是:其核心是面向接口编程 抽象:即抽象类和接口,抽象是对实现的约束,对依赖 ...

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

    文章目录 一.依赖倒置原则简介 二.面向实现编程代码示例 ( 反面示例 ) 1.顾客类 2.测试类 三.依赖倒置原则代码示例 ( 推荐示例 | 使用接口方法注入 IGood 实现类 ) 1.顾客类 2 ...

  5. ASP.NET 设计模式中依赖倒置原则

    依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象. B.抽象不应该依赖于具体,具体应该依赖于抽象. 依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于 ...

  6. 设计模式原则之依赖倒置原则

    所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. ...

  7. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  8. 深入浅出设计模式原则之依赖倒置原则

    下面以"顾客购物程序"为例来说明依赖倒置原则的应用(案例源码). #include <QCoreApplication> #include <iostream&g ...

  9. java设计模式之设计原则②依赖倒置原则

    定义: ⑴高层模块不应该依赖低层模块,二者都应该依赖其抽象 ⑵抽象不应该依赖细节,细节应该依赖抽象 ⑶针对接口编程,不要针对实现编程 我们通过抽象包括使用接口或者抽象类可以使各个类或模块的实现彼此独立 ...

  10. 设计模式六大原则(3)——依赖倒置原则

    定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类A一 ...

最新文章

  1. NYOJ 409 郁闷的C小加(三)
  2. 2021云数据库RDS重磅升级发布会
  3. 苹果手机屏幕镜像搜索不到电视_最全小米电视投屏教程(建议收藏)
  4. 【Linux学习】pthread_create主线程与创建的新线程之间退出关系
  5. Redis数据类型详解(五种)
  6. Java常见面试题:对象的访问定位的两种方式
  7. Flutte的ListView不能直接嵌套ListView解决办法
  8. python实例编写(7)---测试报告与测试套件(多个py文件,1个py文件内多个用例)
  9. App 瘦身最全最佳实践
  10. Python(十三)企业微信Api自动化框架搭建
  11. centos 计算器_Linux下的计算器
  12. java的自省机制_深入理解Java反射机制
  13. [受限玻尔兹曼机] 原理、求解过程推导、深度信念网络
  14. iphone远没有android好用,IPhone真的比Android流畅?不要被视觉欺骗了
  15. 重要信息通知短信解决方案
  16. 点歌服务器定时关闭系统,iOS 基础教程:设置系统自带的睡眠计时器,定时关闭音乐播放...
  17. 水平滚动条和垂直滚动条设置
  18. Ubuntu Github基本使用方法
  19. Mr.Fang出品:银企互联(NC模式)开发者版本(.NET WebService中间件,Java、PHP、Python等跨语言测试通过)
  20. centos7系统安装与磁盘空间分配

热门文章

  1. 知识付费平台现状:供应商、购买者议价能力较
  2. 07 Halcon 点云平面角测量
  3. 常见的视频制式及其区别
  4. 苹果测试软件游戏,TestFlight苹果app
  5. 路由器如何设置无线桥接
  6. matlab打开图片无效的文件名,Matlab - 使用textscan错误(文件标识符无效)
  7. [论文笔记] EMNLP2019: A Lexicon-Based Graph Neural Network for Chinese NER
  8. oralce分析函数---group by || rollup || cude || grouping || grouping sets
  9. python元组使用什么符号表示方括号_Python的精髓居然是方括号、花括号和圆括号!...
  10. python爬微信公众号教程_python爬搜狗微信获取指定微信公众号的文章