当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

怎样筹划符合的接口[Java编程]

赞助商链接



  本文“怎样筹划符合的接口[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

择要:我们在计划系统接口时,常常会碰到这样的问题:

1、我们的接口应当供应多少办法才符合?

2、我们的接口应当供应"原子办法"还是"复合办法"?

3、我们的接口能否应当封装(大概,可否封装)全部的细节?

接口的计划需求考虑用户的利用习惯、利用的便利程度、利用的安全程度,按照我的编程经验,下面会具体谈论接口计划的2个需求衡量的方面:接口的单一化 & 复合化.

接口

接口供应了差别系统之间大概系统差别组件之间的界定.在软件中,接口供应了一个屏障,从而从实现中别离目标,从具体中别离抽象,从作者中别离用户.

站在用户的角度看,一个接口成立并命名了一个目标对象的利用办法.一些约束(比方:编译时的范例系统、运行时的非常机制及返回值)使得类作者的目的得以表现和加强.供应(affordances)指事物的被感知的真实的属性,这些属性可以决意事物利用的大概办法,供应供应了对事物操作的线索.

类计划者的一个职责就是在接口中减小约束与供应之间的隔阂、匹配目标以及一定程度上的安闲度,尽大概减小错误利用目标对象的大概.

封装

关于封装来说,远不止数据私有那么简单.在计划中,封装常常会触及到自我包含(self-containment).假如一个类需求你知道若何调用它办法(e.g. 在一个线程的环境中,在一个办法调用后调用另一个办法,你必须明确地同步对象),那么它的封装性就不如将全部这些全部包含并躲藏的类(e.g. 这个类是thread-safe的)好.前一个计划存在着计划的漏洞,它的很多限定条件是模糊的,并且把部份责任推给了用户,而不是让类供应者做这些工作来完成类的计划.

在空间大概时间上别离办法的履行(比方,线程,远程办法调用,消息行列),可以对计划的精确性和效率产生意义深远的影响.这种别离带来的后果是不可轻忽的: 并发引入了不肯定性和环境(context)挑选的开销; 分布引入了回调的开销,这些开销大概不断增添,并且会招致错误.  这些是计划的问题,改正它们可不是象改正bug那样简单.

假如一个接口主要由存取办法(set和get办法)构成,每个办法都呼应的直接指向某个私有域,那么它的封装性会很差.接口中的域存取办法普通是不会供应信息的:他们在对象的利用中不能通讯、简单化和抽象化,这普通会招致代码冗长,并且简单出错.

所以,我们首先考虑接口计划的第一个原则:

号令与查询别离(Command-Query Separation)

要求:保证一个办法不是号令(Command)就是查询(Query)

定义:

查询:当一个办法返回一个值往复应一个问题的时刻,它就具有查询的性质;

号令:当一个办法要改变对象的状况的时刻,它就具有号令的性质;

普通,一个办法大概是纯的Command情势大概是纯的Query情势,大概是二者的混合体.在计划接口时,假如大概,应当尽大概使接口单一化,保证办法的行为严峻的是号令大概是查询,这样查询办法不会改变对象的状况,没有副作用(side effects),而会改变对象的状况的办法不大概有返回值.也就是说:假如我们要问一个问题,那么就不该该影响到它的答案.实际利用,要视具体情形而定,语义的清楚性和利用的简单性之间需求衡量.

比方,在java.util.Iterator中,hasNext可以被看做一种查询,remove是一种号令,next归并了号令和查询:

public interface Iterator{
boolean hasNext();
Object next();
void remove();
}

这里,假如不将一个Iterator对象的当前值向前到下一个的话,就不可以查询一个Iterator对象.假如没有供应一个复合办法next,我们将需求定义一系列的号令办法,比方:初始化(initialization)、持续(continuation)、拜候(access)和行进(advance),它们固然清楚定义了每个行动,但是,客户代码过于复杂:

for(initialization; continuation condition; advance){
... access for use ...
}

将Command和Query功效归并入一个办法,便利了客户的利用,但是,降低了清楚性,并且,大概不便于基于断言的程序计划并且需求一个变量来保存查询后果:

Iterator iterator = collection.iterator();
while(iterator.hasNext();){
Object current = iterator.next();
... use current...
}


  以上是“怎样筹划符合的接口[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 怎样筹划符合的接口
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .