在公司工做了快一年了,发现之前的重点是放在语言上的(C/C++),回过头来看看,发现语言只是一种工具,实现咱们产品的一种实现方式。一个好的产品,在于它的设计框架、在于它的扩展性,灵活性,维护性,复用性(借用面向对象的四大好处)。mysql
然而为了实现一个好的产品,须要咱们来慢慢的积累,慢慢的从使用语言的角度上升到脱离语言,具备全局的意识,能够利用一些设计模式或者框架来使咱们产品更加完美,复用。千里之行,始于足下。让咱们一块儿来开始学习设计模式吧。sql
先来看看依赖倒转原则吧,原话解释是抽象不依赖细节,细节应该依赖于抽象。通俗的说,就是要面向接口来编程,多个模块共同抽象出一个通用接口,各个模块的实现都依赖于这个通用接口,之后模块实现能够改变,可是通用接口一直不变。这样就减小了模块间的耦合度,提升了模块内的聚合度。数据库
之前咱们在开发项目时,大多都是要访问数据库的,因此咱们就把访问数据库代码写成了函数,每次作新的项目时,就去调数据库函数,能够说是高层模块依赖低层模块。当低层的数据库模块由mysql更换为oralce时,全部的高层模块调用低层模块的代码都须要修改,形成的巨大工做量可想而知。编程
若是咱们对高层模块对低层模块的调用抽象出一个接口或者抽象类。高层模块经过实例化接口类,而后调用接口类中提供的接口来调用低层模块,彻底不用关心低层模块是怎么实现接口的;低层模块经过继承来实现接口,无需关心高层模块怎么调用。这样就实现了程序模块间的分离,即便后面低层模块实现更改了,高层模块也不用担忧。或者是高层模块的业务逻辑改变了,只要接口没有变,低层也不用关心。设计模式
举个例子,电脑至关于一个咱们须要实现的产品,咱们定义了好了主板与CPU、硬盘、内存、显卡之间的接口。生产CPU的厂商不论是Inter仍是AMD都只须要按照接口来实现CPU,无需关心其余模块;显卡厂商只须要根据接口来实现显卡,也无需关心其余模块。当咱们电脑某个模块坏了,如内存条坏了,咱们只需更换一条内存条就行了,而没有必要将电脑返厂进行整套检测和维修。框架
如何作到面向接口的编程,其实很简单。面向接口编程的本质是:函数
一、定义接口:能够是多方共同定义一个统的接口,也但是客户(需求方)提供一个接口 工具
二、实现接口 :通常 是服务方经过实现接口,来完成客户(需求方)的要求学习
三、调用接口:客户(需求方)经过调用定义的接口来完成与不一样服务方的对接,无需关心是哪一方实现。spa
有些简单,可是能够引导一下你们
#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"); } }
输出:
沙米水平有限,但愿你们多多指导,一块儿探讨,一块儿提升。