2019独角兽企业重金招聘Python工程师标准>>>

  闲谈  

在公司工作了快一年了,发现以前的重点是放在语言上的(C/C++),回过头来看看,发现语言只是一种工具,实现我们产品的一种实现方式。一个好的产品,在于它的设计框架、在于它的扩展性,灵活性,维护性,复用性(借用面向对象的四大好处)。

然而为了实现一个好的产品,需要我们来慢慢的积累,慢慢的从使用语言的角度上升到脱离语言,具有全局的意识,可以利用一些设计模式或者框架来使我们产品更加完美,复用。千里之行,始于足下。让我们一起来开始学习设计模式吧。

依赖倒转模式   

先来看看依赖倒转原则吧,原话解释是抽象不依赖细节,细节应该依赖于抽象。通俗的说,就是要面向接口来编程,多个模块共同抽象出一个通用接口,各个模块的实现都依赖于这个通用接口,以后模块实现可以改变,但是通用接口一直不变。这样就减少了模块间的耦合度,提高了模块内的聚合度。

以前我们在开发项目时,大多都是要访问数据库的,所以我们就把访问数据库代码写成了函数,每次做新的项目时,就去调数据库函数,可以说是高层模块依赖低层模块。当低层的数据库模块由mysql更换为oralce时,所有的高层模块调用低层模块的代码都需要修改,造成的巨大工作量可想而知。

如果我们对高层模块对低层模块的调用抽象出一个接口或者抽象类。高层模块通过实例化接口类,然后调用接口类中提供的接口来调用低层模块,完全不用关心低层模块是怎么实现接口的;低层模块通过继承来实现接口,无需关心高层模块怎么调用。这样就实现了程序模块间的分离,即使后面低层模块实现更改了,高层模块也不用担心。或者是高层模块的业务逻辑改变了,只要接口没有变,低层也不用关心。

电脑例子 

举个例子,电脑相当于一个我们需要实现的产品,我们定义了好了主板与CPU、硬盘、内存、显卡之间的接口。生产CPU的厂商不管是Inter还是AMD都只需要按照接口来实现CPU,无需关心其他模块;显卡厂商只需要根据接口来实现显卡,也无需关心其他模块。当我们电脑某个模块坏了,如内存条坏了,我们只需更换一条内存条就好了,而没有必要将电脑返厂进行整套检测和维修。

    自己理解

如何做到面向接口的编程,其实很简单。面向接口编程的本质是:

1、定义接口:可以是多方共同定义一个统的接口,也可是客户(需求方)提供一个接口

2、实现接口 :一般 是服务方通过实现接口,来完成客户(需求方)的要求

3、调用接口:客户(需求方)通过调用定义的接口来完成与不同服务方的对接,无需关心是哪一方实现。

C语言例子

有些简单,但是可以引导一下大家

#include <stdio.h>
#include <string.h>/*定义函数指针类型 ==> 定义接口*/
typedef int (*Communication)(int sendID,int revID,char msg[100]);/*函数指针做函数参数 ==>调用接口,不管是谁实现的接口*/
int useComm(int sendID,int revID,char msg[100],Communication comcate)
{int ret = 0;ret = comcate(sendID,revID,msg);if(ret == 0){printf("Communication is normal.msg is %s\n",msg);}else{printf("Communication is error.reasonCode=%d\n",ret);}
}/*华为厂商实现接口*/
int CommunicationHW(int sendID,int revID,char msg[100])
{printf("sendID:%d  send revID:%d msg is %s.(bad msg).\n @HW\n",sendID,revID,msg);return 1;
}/*中兴厂商实现接口*/
int CommunicationZTE(int sendID,int revID,char msg[100])
{printf("sendID:%d  send revID:%d msg is %s.\n @ZTE\n",sendID,revID,msg);return 0;
}int main()
{int sendID = 1001;int revID = 2002;char msg[100] = {0};int ret = 0;strcpy(msg,"hello 2002, I am 1001, I miss you !");/*调用华为厂商实现的接口*/ret = useComm(sendID,revID,msg,CommunicationHW);if(ret != 0){printf("HW Implement interface error,please not use HW\n");}else{printf("HW Implement interface good,please  use HW\n");}/*调用中兴厂商实现的接口*/ret = useComm(sendID,revID,msg,CommunicationZTE);if(ret != 0){printf("ZTE Implement interface error,please not use ZTE\n");}else{printf("ZTE Implement interface good,please  use ZTE\n");}
}

输出:

沙米水平有限,希望大家多多指导,一起探讨,一起提高。

转载于:https://my.oschina.net/u/1783725/blog/675498

设计模式-依赖倒转模式(面向接口编程)相关推荐

  1. Java设计模式——依赖倒转原则

    一.什么是依赖倒转原则? 依赖倒转原则讲的是,要依赖于抽象,不要依赖于具体. 实现"开-闭"原则的关键是抽象化,并且从抽象化导出具体化实现."开-闭"原则是面向 ...

  2. 浅谈设计模式-依赖倒转(倒置)原则

    书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 1>高层次的模块不要依赖低层次的模块,二者都应该依赖于其抽象 2>抽象不应该依赖于具体,而是具体应该依赖于抽象 ...

  3. 23种设计模式-依赖倒转原则

    概念: 依赖倒转原则(Dependence Inversion Principle)是指: 1) 高层模块不应该依赖低层模块,二者都应该依赖其抽象 2) 抽象不应该依赖细节,细节应该依赖抽象 3) 依 ...

  4. Java设计模式——依赖倒转原则(实例)

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

  5. [设计模式]依赖倒转原则

    代码如下: #include <iostream> #include <string>using namespace std;//银行工作人员 class BankWorker ...

  6. Java设计模式 - 依赖倒转原则

    文章目录 1. 违反依赖倒转原则 2. 遵守依赖倒转原则 3. 依赖关系传递的3种方式 3.1 接口传递 3.2 构造方法传递 3.3 setter方法传递 4. 依赖倒转原则的注意事项和细节 Dep ...

  7. 设计模式--依赖倒转原则

    依赖倒转原则:依赖于抽象类(接口类),不依赖于具体实现类 即:高层业务逻辑依赖抽象类,具体实现类 依赖于抽象业务逻辑 高层逻辑为:软件设计具体需求(eg:制造一台电脑) 抽象层为:很多抽象类(eg:电 ...

  8. 设计模式依赖倒转原则

  9. 面向接口编程 (噬菌体) 不错的接口

    面向接口编程 依赖倒置的意思是,我们在面向对象设计时,将这个上层依赖下层的结构化编程依赖思想倒置一下子(其实不是倒置,应该是转换一下子),变成:上层不依赖于下层,下层也不依赖于上层,上层和下层都依赖一 ...

最新文章

  1. SSIS中的记录集目标
  2. 201671010436 王雪刚 实验四 《英文文本统计分析》结对项目报告
  3. 电气期刊论文实现:热电联产经济调度【有代码】
  4. 19-for循环语句
  5. AnswerOpenCV(1001-1007)一周佳作欣赏
  6. 洛谷P2497:基站建设(splay、斜率优化)
  7. 前端学习(1993)vue之电商管理系统电商系统之根据id删除数据
  8. 小汤学编程之JAVA基础day04——流程结构
  9. 如何跟踪发现Linux内核补丁(patch)
  10. 如何使用数据库引擎优化顾问优化数据库
  11. ibm服务器硬件故障检测工具,IBM服务器故障提示Memory/bttery problems were detected
  12. 多用户远程(RDP Wrapper)安装及使用步骤
  13. S变换介绍(附代码)
  14. stm8 低功耗 RTC唤醒
  15. Myeclipse10破解版安装包
  16. QQ心跳包格式分析 监听局域网QQ号代码
  17. 零基础学习SpringBoot
  18. 多波束测深系统工作原理及组成,多波束在无人船上的应用
  19. Mac应用程序无法打开提示不明开发者或文件损坏的处理方法
  20. fMRI数据分析处理原理及方法fMRI数据分析处理原理及方法

热门文章

  1. java代码雨_代码雨 - java代码库 - 云代码
  2. mysql如何实现树状结构_实现树状结构的两种方法
  3. 安装服务器加硬盘分区,DOL服务器硬盘分区与安装模式
  4. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)
  5. 简洁大气好看的个人博客模板HTML源码
  6. 聚合登录平台网站源码
  7. Linux Shell脚本入门教程系列之(一)Shell简介
  8. 深入理解JavaScript系列:根本没有“JSON对象”这回事!
  9. 如何使用社会化媒体网络建立个人品牌(国外篇)
  10. 在Linux中模拟击键和鼠标移动