Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 以-able结尾的接口中的方法命名约定_Java_Oop_Design Patterns - Fatal编程技术网

Java 以-able结尾的接口中的方法命名约定

Java 以-able结尾的接口中的方法命名约定,java,oop,design-patterns,Java,Oop,Design Patterns,假设我有一个Opener类或接口(无所谓),它有一个方法public open(Openable item)。行李,窗口,门实现了可打开的界面,因为它们都可以打开 问题:如何在Openable接口中命名方法?如果我将它命名为void open(),那么这意味着所有open的对象都可以打开,这不是真的,只有Opener可以打开Openable对象。我将它命名为void openWithOpener()。 这样,您就不必依赖于一个开启器,也可以避免暗示可打开的对象可以自己打开。我将其命名为void

假设我有一个
Opener
类或接口(无所谓),它有一个方法
public open(Openable item)
行李
窗口
实现了
可打开的
界面,因为它们都可以打开


问题:如何在
Openable
接口中命名方法?如果我将它命名为
void open()
,那么这意味着所有
open
的对象都可以打开,这不是真的,只有
Opener
可以打开
Openable
对象。

我将它命名为
void openWithOpener()

这样,您就不必依赖于一个
开启器
,也可以避免暗示
可打开的
对象可以自己打开。

我将其命名为
void openWithOpener()

这样,您就不必拘泥于一个
开启器,也可以避免暗示
Openable
对象可以自己打开。

接口就是契约。如果一个类实现了一个接口,这意味着该类完全支持接口中声明的所有操作。(尽管情况并非总是如此)。关于标题中的语句:通常,名称以“-able”结尾的所有接口都将类标记为能够做某事。示例:可运行-
run()
、可执行-
execute()
、可比较-
compareTo()
,等等

(A)

上面的接口确实意味着实现它的任何类都可以打开,而不管调用上下文如何。这并不一定意味着对象将打开,但这不是重点

考虑@sgj88_389;提出的以下建议:

(B)

由于您声明只有
Opener
可以打开
Openable
对象,因此理论上这是一个更好的选择。(理想情况下,对象只应更改其自身的内部构件,而不应更改其他对象)。然而,在实践中,
Opener
就像一个改变行为的对象,类似于策略模式

public interface Opener {
    // or something similar
    double fractionToOpen();

    Opener FULL_OPENER = () -> 1.0;
    Opener HALF_OPENER = () -> 0.5;
}
原因是,
Opener
不知道任何有关
Openable
的内部信息以更改其状态,而名称表明它知道。您不会在
Opener
中使用
open()
,因为这样您就不需要
Opener
。因此,设计和实现的语义不匹配

(C)

由于只有
Opener
type可以打开它们,因此可以假定有更多的方法来修改
Openable
的状态,而不仅仅是一次调用
open()
。 然后,
Openable
需要更多的方法来修改其内部状态,例如

setOpenRate()、setOpenFraction()等

如果情况并非如此,并且问题涉及调用权限,即只有一个类
Opener
,其中可以使用
open()
,那么它不应该是一个接口


也许给定界面设计的上下文有助于确定最佳选项。

界面就是契约。如果一个类实现了一个接口,这意味着该类完全支持接口中声明的所有操作。(尽管情况并非总是如此)。关于标题中的语句:通常,名称以“-able”结尾的所有接口都将类标记为能够做某事。示例:可运行-
run()
、可执行-
execute()
、可比较-
compareTo()
,等等

(A)

上面的接口确实意味着实现它的任何类都可以打开,而不管调用上下文如何。这并不一定意味着对象将打开,但这不是重点

考虑@sgj88_389;提出的以下建议:

(B)

由于您声明只有
Opener
可以打开
Openable
对象,因此理论上这是一个更好的选择。(理想情况下,对象只应更改其自身的内部构件,而不应更改其他对象)。然而,在实践中,
Opener
就像一个改变行为的对象,类似于策略模式

public interface Opener {
    // or something similar
    double fractionToOpen();

    Opener FULL_OPENER = () -> 1.0;
    Opener HALF_OPENER = () -> 0.5;
}
原因是,
Opener
不知道任何有关
Openable
的内部信息以更改其状态,而名称表明它知道。您不会在
Opener
中使用
open()
,因为这样您就不需要
Opener
。因此,设计和实现的语义不匹配

(C)

由于只有
Opener
type可以打开它们,因此可以假定有更多的方法来修改
Openable
的状态,而不仅仅是一次调用
open()
。 然后,
Openable
需要更多的方法来修改其内部状态,例如

setOpenRate()、setOpenFraction()等

如果情况并非如此,并且问题涉及调用权限,即只有一个类
Opener
,其中可以使用
open()
,那么它不应该是一个接口


也许考虑到界面设计的某些环境将有助于确定最佳选项。

如果
Openable
就像拥有一个
open
方法一样简单,那么为什么您需要
Opener
?为了打开它,
Opener
如何与
Openable
交互?如果它只在
Openable
上调用
open
方法,那么为什么需要
Opener
呢?如果
Openable
简单到只有一个
open
方法,那么为什么需要一个
Opener
呢?
Opener
如何与
Openable
交互以打开它?如果它只调用
Openable
上的
open
方法,那么为什么需要
Opener
呢?我认为这不好,因为方法应该
public interface Opener {
    // or something similar
    double fractionToOpen();

    Opener FULL_OPENER = () -> 1.0;
    Opener HALF_OPENER = () -> 0.5;
}