餐馆那些事之:接口实现分离
来源:互联网 发布:教师网络研修平台 编辑:程序博客网 时间:2024/05/12 20:04
1. 概念
GOF书中提到,面向对象编程第一原则: "Program to an interface, not an implementation" ,这是接口实现分离的基本思想。
我的理解: “在开发过程中,在外部用户和实现者之间加入一层接口,外部用户调用接口为其服务,实现者针对接口进行实现。“
外部用户和实现者的概念我们可以大到系统 ,也可以小到函数。本质上是分层的设计理念
通过在不同的层次之间,加入接口,至少可以带来以下二个好处:
1). 内部实现对外部用户透明,内部实现的修改,不影响外部用户的使用,当然,前提是友好的对外接口。
2). 利于开发者之间的并行,在定义好接口之后,各层可以在不互相影响的前提下,并行开发。
2.例子
餐馆的厨师老王是个高级厨师,他有一门独门秘技”红烧鱼“,既然是独门秘技,那么他当然不想告诉别人是怎么做的咯。
我们看下怎么实现:
对外接口类:fish
实现类:fish_wang
code:
fish.h
#include "fish_wang.h"class fish{public://做菜咯void cook();//construct and deconstructfish();~fish(void);private:// 秘技 之 王师傅fish_wang* _fish_wang;};
fish.cpp:
#include "fish.h"using namespace std;fish::fish(){_fish_wang = new fish_wang;}fish::~fish(void){if(!_fish_wang){delete _fish_wang;}}void fish::cook(void){_fish_wang->cook();}
fish_wang.h
#include <iostream>class fish_wang{public://老王做菜咯void cook();fish_wang(void);~fish_wang(void);private:// 老王的独门秘技,怎么做我不告诉你void wang_cook();};
fish_wang.cpp
#include "StdAfx.h"#include "fish_wang.h"fish_wang::fish_wang(void){}fish_wang::~fish_wang(void){}void fish_wang::cook(){wang_cook();std::cout << "老王做鱼" << std::endl;}void fish_wang::wang_cook(){//独门秘技,怎么做我不告诉你}
测试:
#include "fish.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){//外部用户,使用接口实现fish myfish;myfish.cook();system("pause");return 0;}
3. 总结
上面是一个简单的接口实现分离的例子,在实际项目中,特别是在并行开发的时候,这种设计方法大量使用。
- 餐馆那些事之:接口实现分离
- 餐馆那些事之:Singleton Pattern
- 餐馆那些事之:Observer Pattern
- 餐馆那些事之:Composit Pattern
- 餐馆那些事之:Command Pattern
- 餐馆那些事之:Null Object
- 餐馆那些事之:Proxy Pattern
- 餐馆那些事之:Adapter Pattern
- 餐馆那些事之:Visitor Pattern
- 餐馆那些事之:State Pattern
- 餐馆那些事之:Mediator Pattern
- 餐馆那些事之:Facade Pattern
- 餐馆那些事之:Decorator Pattern
- 餐馆那些事之:Flyweight Pattern
- 餐馆那些事之:Mediator Pattern
- 餐馆那些事之:Visitor Pattern
- 餐馆那些事之:Command Pattern
- 日志系列之接口与实现分离
- ExtJS中get、getDom、getCmp、getBody、getDoc使用 javascript[转] .
- div中的相对定位与绝对定位(转)
- 用异或交换两个变量的分析
- zend studio 出错重装
- AJAX原理
- 餐馆那些事之:接口实现分离
- android编程1:ip2id程序
- zoj 2971 Give Me the Number
- zoj 3479 Chinese Zodiac
- 浮点数
- poj 2153 Rank List
- vmware下 ubuntu10.04与WinXp共享文件夹hgfs为空的解决办法
- 关于C语言中getopt()函数的使用方法
- Linux必学的60个命令(1)-安装与登陆