模板方法模式问题

时间:2019-12-02 07:29:47

标签: java design-patterns

如果我有一个抽象的console.log类,其中有一个Parent和一个具体的templateMethod类:

Child

如果我只希望用户知道abstract class Parent { final void templateMethod() { foo(); } abstract void foo(); } class Child extends Parent { @Override void foo() { System.out.println("foo"); } } 并且不希望向templateMethod类的用户公开foo方法,而让Child类定义Child方法的实现? 还是在这种情况下不适合使用模板方法?然后,我还能使用其他策略吗?

1 个答案:

答案 0 :(得分:0)

如JB Nizet在评论中所建议,您可以执行以下操作:

abstract class Parent {
    final void templateMethod() {
        foo();
    }

    abstract protected void foo();
}

class Child extends Parent {
    @Override
    protected void foo() {
        System.out.println("foo");
    }
}

由于Parent.foo()protected,因此只有Parent的子类可以调用该方法。

您可能还会发现此问题有帮助:What is the difference between public, protected, package-private and private in Java?