模板方法模式 - 命名规范

18

我有一个抽象类,名为RenderableEntity

我有一个公共方法render(),该方法包装了一些围绕抽象受保护的render() 方法的逻辑。我应该如何命名这个抽象的 render() 方法?是否有某种约定,例如对于受保护的render()方法使用doRender()makeRender()之类的名称?

public abstract class RenderableEntity extends Entity {

    private boolean visible;

    public void render(){
        if(visible){
            render();
        }
    }
    protected abstract void render();
}

编辑:我知道这个代码片段无法编译。我只是想知道如何命名这个抽象方法,因为我不能有相同名称和参数的方法。


把抽象方法命名为aRender,而将另一个方法仅命名为render,这样怎么样? - Kakalokia
你的代码目前无法编译,因为存在两个同名的方法。 - rai.skumar
我认为与同事讨论会更好。在我看来,我会使用 renderImpl 或者 renderInternal 作为方法名。因为我想要解释这个方法包含了渲染的主要逻辑。 - Taky
3个回答

18

首先:只有当这些方法被模板方法独家使用时,才考虑为这些方法使用特殊命名。此外,您应该注释这些方法,说明它们是由模板方法使用的,并且对其进行任何修改应考虑到该用途。

组成模板方法中可替换步骤的方法通常称为“钩子”方法。有时您会看到它们以“Hook”结尾。

在您的例子中,您可能希望将其命名为renderHook(),但如果您可以更具体地描述它在模板方法render()中执行的任务,那将更加清晰明了。

我曾见过doXXX()被使用,不过这主要是针对模板和钩子之间是一对一关系的情况。

以下是一些可能的建议。对于一个模板方法stuff()

  • 如果stuff()主要是围绕单个挂钩的简单控制逻辑,则钩子的名称为doStuff()(这似乎是上面示例的情况)

  • 如果stuff()编排多个挂钩,则使用Hook后缀为它们命名,并且不要将任何一个与模板同名(在这种情况下,不应有stuffHook()方法)。


1

关于这个问题没有一个统一的规定。但是我更喜欢看到更有意义的名称。例如:forceRenderrenderNowrenderImmideately或类似的名称,它们告诉我们它以某种方式与普通的render不同。


0

模板方法模式没有任何关于命名规范的指导方针。但是请给出适当的名称,以便清楚地解释方法的意图,并且在将来更容易进行维护


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接