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;
}