怎样筹划符合的接口[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好友分享! |
- ·上一篇文章:动态扩大Java操纵
- ·下一篇文章:Java语言构造性情势之变压器情势介绍
- ·中查找“怎样筹划符合的接口”更多相关内容
- ·中查找“怎样筹划符合的接口”更多相关内容