Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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中,-Impl后缀是钩子方法的合法命名约定吗?_Java_Design Patterns_Naming Conventions_Template Method Pattern - Fatal编程技术网

在Java中,-Impl后缀是钩子方法的合法命名约定吗?

在Java中,-Impl后缀是钩子方法的合法命名约定吗?,java,design-patterns,naming-conventions,template-method-pattern,Java,Design Patterns,Naming Conventions,Template Method Pattern,我检查了一些旧代码,在模板方法实现中发现了以下命名约定 // TEMPLATE METHOD // Check condition and fail fast if condition is met. // Otherwise call the hook method (to be implemented by subclasses). @Override public boolean accept(String text) { if (condition) { retu

我检查了一些旧代码,在模板方法实现中发现了以下命名约定

// TEMPLATE METHOD
// Check condition and fail fast if condition is met.
// Otherwise call the hook method (to be implemented by subclasses).
@Override
public boolean accept(String text) {
    if (condition) {
        return false;
    }

    // call to the hook method. Each subclass implements its own logic
    return acceptImpl(text);
}

// HOOK METHOD
protected abstract boolean acceptImpl(String text);
我希望钩子方法名为doAccept()acceptHook()而不是acceptImpl()


在实践中,钩子方法是否使用“-Impl”后缀?或者这是一种令人困惑的命名实践?

首先,请注意,这里的示例不是GoF定义中的钩子方法。在327-328页上,GoF模板方法模式定义了模板方法调用的操作类型,包括以下内容

  • 原始操作(即抽象操作)
  • 钩子操作,提供默认行为,子类可以在必要时扩展
显然,这个示例演示了前者(抽象操作),而不是后者(默认操作)。紧接着操作列表,GoF强调了这两种类型之间的区别

模板方法必须指定哪些操作是钩子(可以被重写),哪些是抽象操作(必须被重写)

这导致我们

命名约定。您可以通过在名称中添加前缀来标识应被覆盖的操作。例如带有“Do-”的模板方法名称:“DoCreateDocument”、“DoRead”等等

不幸的是,GoF似乎没有提供区分钩子操作和抽象操作的约定。关于“impl”后缀的问题显然是主观的;根据我的经验,“impl”通常与反模式一起使用