Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 模板方法模式问题_Java_Design Patterns - Fatal编程技术网

Java 模板方法模式问题

Java 模板方法模式问题,java,design-patterns,Java,Design Patterns,如果我有一个抽象的Parent类,它有一个templateMethod和一个具体的Child类: abstract class Parent { final void templateMethod() { foo(); } abstract void foo(); } class Child extends Parent { @Override void foo() { System.out.printl

如果我有一个抽象的
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
方法公开给class
Child
的用户,同时让子类定义
foo
方法的实现,我该怎么办?
或者,模板法在这种情况下不合适吗?那么,我还可以使用其他策略吗?

正如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()
保护
,因此只有
Parent
的子类才能调用该方法

您可能还会发现这个问题很有用:

将templateMethod()公开,但foo()方法受保护。