关于何时使用接口

有朋友问我接口和抽象类的区别,还有何时使用接口,关于这个问题网上应该已经有不少讲述的文章的了,不过我还是尝试用自己的话说一遍顺便自己也复习一下。
接口和抽象类应该是用在你确定你的软件模块在某个时候必须要执行一些事情,但在你开发的是候还

不能确定这些事情的实现细节用的。他们的不同点在于,一个具体类(书上一般都把继承下来的类叫

个具体类或派生类)可以同时“实现”(注意接口是用实现这个词的)多个接口。而具体类只能继承

一个基类(不管是抽象类还是基类)。这里我不想太多地讨论这两者地区别。只想用一个例子,说明

接口的用处。先看看我们要开发的软件模块的背景。
这是一个模拟人的生活的软件(也许有点像“模拟人生”吧)。在我这个模块中,要用到三个事物
人:他有行走,吃饭,睡觉等行为。
工人:他有工作的行为(这许以后还会继承下)
为了说明问题,我还加入了母亲这个人物:她有做饭、做家务等先为。

在目前为止,我只知道我要开发的模块里只有这些东西,但我不清楚这些方法的具体细节会怎么样实

现。比如Walk()方法是怎么实现(也许有些领导会要求使用OPenGL来画出很炫的画面,但也许有的人

只要走在Dos的画面上作出一个“光标”移动的过程就够了)。这些在目前,对整个软件的框架都不会

太大的映响。
先看看我们这个模块要用到的接口。

 



// 这里定义了一个“人”的接口。
public   interface  IPeople  // 接口一般用I开头。
{
void Walk();//
void Eat();
void Sleep();
}


// 这里定义了一个工人的接口。
public   interface  IWorker  //
{
void Working();
}


// 这里定义了一个母亲的接口。
public   interface  IMother
{
void Cooking();//母亲要做饭
void DoHourseWork();//做家务。
}

作为一个架构的开发人员,我只要使用这些接口来编程就行了。
然后,在另方面,他也许会交待别一批人去实现这些接口。以下是这些接口要实现的例子。

 

// 某个角色的类
public   class  Role1 : IPeople,IWorker,IMother
{
void Walk()
{....}
void Eat()
{....}
void Sleep()
{....}

void Working()
{....}

void Cooking()
{....}
void DoHourseWork()
{....}
}

比如在一个场景中,我要表示一个工人走去工厂工作我可以这样实现。也许会有这样一个方法。

 

public   void  Work(IWalk obj)
{
if (obj is IPeople)
((IPeople)obj).Walk();
//在界面上做出行走的画面。
obj.Working();//在界面上做出正在工作的画面。
}

// 还有一些个用于表示母亲回家做家务的场面。
public   void  DoHourseWork(IMother obj)
{
if (obj is IPeople)
((IPeople)obj).Walk();
//在界面上做出行走的画面。
obj.DoHourseWork();//在界面上做出正在做家务的画面。
}

然后在我们的其它代码中要调用这个方法,我们就可以这样。

Role1 r = new Role1();//创建一个Role1类。
Work(r);//因为Role1实现了IWorker接口,所以它可以当成IWorker使用。
DoHourseWork(r);//因为Role1实现了IMother接口,所以它可以当成IMother使用。

如果在这以上这个例子中,我们使用的是单继承的话,就无法这样做了。

接口在开发框架时是很有用的,框架的开发者只考虑这个框架里要有什么功能(接口)和怎么是这个

功能(接口)能交互操作。而暂时不用去考虑这些功能的具体实现。不过这些东西是要在开发过程中

体会的。

建议掌握了C#或java的一些知识以后,看看《设计模式》和《重构》。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值