3

我正在阅读关于Template design pattern. 根据我目前的理解,当我们有一个具有定义的过程(方法)集的算法要按顺序完成时,可以使用模板设计模式。主要球员是

1.Abstract Template class提供template method定义流程(方法)和执行顺序。通常这个方法是最终的,所以它的行为不会被修改。模板方法中提到的进程(方法)很少提供默认实现,其他依赖于扩展抽象模板类类型的具体类保留为抽象。

2 Concrete classes extending the Template method.. 如果需要,它们会覆盖默认方法,并为抽象模板类中定义的抽象方法提供实现。

我尝试在 JDK 中搜索它的实现,java.io在阅读了这些类实现了这种模式后,我查看了类。我找不到任何定义一组流程(方法)和执行顺序的方法。

请提供您宝贵的意见。

4

2 回答 2

4

一个简单的例子是java.io.OutputStream

模板
public void write(byte b[], int off, int len)方法是.

它调用抽象方法
public abstract void write(int b)
该方法必须由 的子类实现OutputStream

在这种情况下,模板的不变部分是每个通用的基本错误处理OutputStream,而模板的变体部分是实际编写,它特定于每个具体实现。

你对模式的理解是正确的;但是,它不必那么复杂。基本上,任何在同一个类中调用抽象方法的具体方法都是模板方法。

于 2016-02-22T17:53:44.630 回答
2

更加具体:

在其实现中调用抽象方法的非抽象方法可以归类为模板方法。

Template_method定义操作中算法的程序框架,将一些步骤推迟到子类。如果将完整操作定义为抽象方法,子类将完全控制更改算法的骨架,因此抽象方法不属于模板方法。

例如IO 中的Reader类。

 public int read() throws IOException {
        char cb[] = new char[1];
        if (read(cb, 0, 1) == -1) // this is an abstract method
            return -1;
        else
            return cb[0];
    }

这里

abstract public int read(char cbuf[], int off, int len) throws IOException;是抽象方法。

该方法的实现可以在BufferedReader中找到

public int read(char cbuf[], int off, int len) throws IOException {

}
于 2016-08-03T10:20:03.070 回答