Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果您使用的是基于接口的设计方法,那么如何命名更多的行为接口?_Java_Oop_Interface_Naming Conventions - Fatal编程技术网

Java 如果您使用的是基于接口的设计方法,那么如何命名更多的行为接口?

Java 如果您使用的是基于接口的设计方法,那么如何命名更多的行为接口?,java,oop,interface,naming-conventions,Java,Oop,Interface,Naming Conventions,我正在开发一个包含多个控件(或组件)的库。我使用基于接口的方法进行类型设计,但最终它导致了一个困扰我很长时间的问题。如果您使用基于接口的设计方法,您如何命名行为接口?例如,假设您有一些getter setter函数,它们被许多接口使用,并且它们提供的功能不能用“-able”后缀命名;你会怎么做,或者你会怎么做?谢谢 编辑:例如,我创建了如下界面: public interface HasText { public String getText(); public void s

我正在开发一个包含多个控件(或组件)的库。我使用基于接口的方法进行类型设计,但最终它导致了一个困扰我很长时间的问题。如果您使用基于接口的设计方法,您如何命名行为接口?例如,假设您有一些getter setter函数,它们被许多接口使用,并且它们提供的功能不能用“-able”后缀命名;你会怎么做,或者你会怎么做?谢谢

编辑:例如,我创建了如下界面:

public interface HasText {

    public String getText();

    public void setText(String text);

}

大多数使用此函数的接口没有通用的超级类型。

确定需要不同的行为接口吗?实现一个行为接口和几个具体行为难道还不够吗

举个例子,假设我们有一个真实野生动物的IML实现,比如说一个类
Cat
,带有一些传感器和一个大的行为目录。现在猫眼传感器报告“鼠标!!”。
Cat
将查询它的
行为的
集合
实例,根据法律,如果存储的
行为
实例中有任何实例喜欢采取行动,则会进行匹配。假设列表中存储了
类HuntMouse implements behavior
的一个实例,并且这是最合适的,那么猫将对该
行为调用
action()
,并搜索鼠标

回到你的问题-我认为,一个带有2-3个方法的
行为
接口就足够了,具体的
行为
对象不需要前缀或后缀。如果需要,我建议
-行为
(比如
捕鼠行为


最初您要求提供行为,但您的
HasText
示例显示了某种功能。在这种特殊情况下,
TextProvider
可能是更好的选择,而
hasText
更适合。实现该接口会向类添加
提供一些文本
功能


不是为了回答这个问题,而是为了进一步阅读:


(顺便说一句——我上面的例子的灵感来自机器人领域的实际实现——即使猫不是机器人;)

将接口命名为正确描述实现它的任何类的单词或短语。“HasText”是一个很好的例子,因为它描述了实现者(它有一个Text属性)


使其特定于接口。“IsAnObject”或“MightHaveData”或“ExistsInCyberspace”并非特定于界面。

示例将给出很好的答案!(顺便说一句,“-able”是后缀)后缀,准确地说:)@Bozho-是的,你说得对,“后缀”听起来更好(但是,在维基百科:“在语言学中,后缀(有时也称为后缀或结尾)是放在词干后面的词缀。”)是的。我认为有一点差别,但我无法解释:)在使用Has接口时,需要注意的一点是,在这种情况下,您需要使用多个相同类型的属性,例如两个不同的文本字段。这取决于你正在解决的问题。如果您有很多运行时类型检查来查看是否有东西实现了HasText接口,那么可能有更好的方法来执行您尝试执行的任何操作。更准确地说,我正在尝试在一些接口之间对公共属性进行分组,我不想使用类似命令的方法,因为像getName()这样的专用方法比get(“name”)更具可读性。如果您有特定的需求,那么拥有行为接口、未知行为集合等就可以了,但这样的需求不是例外,不是规则吗?使用getName()而不是get(“Name”)的两个优点是getName为您提供了静态类型(它返回一个字符串,getDate()返回一个DateTime,但get(“propertyName”)返回一个对象),而且字符串(例如“Name”)与重构工具的配合不好——例如,如果您想将“Name”更改为“PersonName”,Deniz昨天添加的示例不是一个行为的接口,而是一个特性的接口。你不会说这样的话:“类的行为就像有一个文本”,它更像是:“类具有提供文本特性”。当然,我们不会对主类使用继承,不是“猫是一种行为”,而是“猫有一种行为”。只有行为才能实现
行为
接口。这当然是一个很好的例子,只是不是我想要的;但是谢谢你提供有用的信息,投票。。。