餐馆那些事之:接口实现分离

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 deconstruct
fish();
~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. 总结

上面是一个简单的接口实现分离的例子,在实际项目中,特别是在并行开发的时候,这种设计方法大量使用。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值