JDK 中的模板设计模式找不到定义要按顺序执行的方法集的方法



我正在阅读有关Template design pattern的信息。根据我目前的理解,当我们有一个算法具有定义的一组过程(方法)时,可以使用模板设计模式。主要参与者是

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

2. Concrete classes extending the Template method .如有必要,这些将重写默认方法,并为抽象模板类中定义的抽象方法提供实现。

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

请提供您的宝贵意见。

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

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

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

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

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

更具体地说:

在其

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

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

例如,IO 中的读取器类。

 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 {
}

最新更新