JDK中的模板设计模式无法找到定义要按顺序执行的方法集的方法
我正在阅读Template design pattern
。 根据我目前的理解,当我们有一个定义了一组过程(方法)的算法时,可以使用模板设计模式。 主要参与者是
1. Abstract Template class
提供定义进程(方法)和执行顺序的template method
。 通常这种方法是最终的,因为它的行为不会被修改。 模板方法中提到的几个进程(方法)都提供了默认实现,而其他一些依赖于扩展Abstract模板类类型的具体类则保留为抽象。
2. Concrete classes extending the Template method
。 如有必要,它们会覆盖默认方法,并提供Abstract Template类中定义的抽象方法的实现。
我试着在JDK中搜索它的实现,我看了java.io
类后看到这些类实现了这个模式。 我无法找到定义一组进程(方法)和执行顺序的任何方法。
请提供您宝贵的意见。
一个简单的例子是java.io.OutputStream
。
模板方法是
public void write(byte b[], int off, int len)
。
它调用抽象方法
public abstract void write(int b)
,
必须由OutputStream
的子类实现。
在这种情况下,模板的不变部分是每个OutputStream
通用的基本error handling,而模板的变体部分是实际写入,这是特定于每个具体实现。
您对模式的理解是正确的; 但是,它不必那么复杂。 基本上,在同一个类中调用抽象方法的任何具体方法都是模板方法。
更具体:
在其实现中调用抽象方法的非抽象方法可以归类为模板方法。
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 { }