JDK 中的模板设计模式找不到定义要按顺序执行的方法集的方法
Template design pattern in JDK, could not find a method defining set of methods to be executed in order
我正在阅读 Template design pattern
。根据我目前的理解,当我们有一个算法和定义的一组过程(方法)要按顺序完成时,可以使用模板设计模式。
主要参与者是
1.Abstract Template class
提供template method
定义过程(方法)和执行顺序。通常这个方法是最终的,所以它的行为没有被修改。模板方法中提到的过程(方法)中很少有默认实现,其他取决于扩展抽象模板的具体 classes class 类型保留为抽象。
2.Concrete classes extending the Template method
。如有必要,它们会覆盖默认方法,并为抽象模板 class.
中定义的抽象方法提供实现
我尝试在 JDK 中搜索其实现,在阅读这些 classes 实现此模式后,我查看了 java.io
classes。我找不到任何定义一组流程(方法)和执行顺序的方法。
请提供您宝贵的意见。
一个简单的例子是java.io.OutputStream
。
template method是
public void write(byte b[], int off, int len)
。
调用抽象方法
public abstract void write(int b)
,
必须由 OutputStream
的子 class 实现。
在这种情况下,模板的不变部分是每个OutputStream
通用的基本错误处理,而模板的可变部分是实际编写,具体到每个具体实现。
您对模式的理解是正确的;但是,它不必那么复杂。基本上,任何在同一 class 中调用抽象方法的具体方法都是模板方法。
更具体地说:
在其实现中调用抽象方法的非抽象方法可以归类为模板方法。
Template_method 定义运算中算法的程序框架,将一些步骤推迟到子classes。如果将完整操作定义为抽象方法,子classes 将拥有更改算法骨架的完全控制权,因此抽象方法不会class 化为模板方法。
例如Reader class 在 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 {
}
我正在阅读 Template design pattern
。根据我目前的理解,当我们有一个算法和定义的一组过程(方法)要按顺序完成时,可以使用模板设计模式。
主要参与者是
1.Abstract Template class
提供template method
定义过程(方法)和执行顺序。通常这个方法是最终的,所以它的行为没有被修改。模板方法中提到的过程(方法)中很少有默认实现,其他取决于扩展抽象模板的具体 classes class 类型保留为抽象。
2.Concrete classes extending the Template method
。如有必要,它们会覆盖默认方法,并为抽象模板 class.
我尝试在 JDK 中搜索其实现,在阅读这些 classes 实现此模式后,我查看了 java.io
classes。我找不到任何定义一组流程(方法)和执行顺序的方法。
请提供您宝贵的意见。
一个简单的例子是java.io.OutputStream
。
template method是public void write(byte b[], int off, int len)
。
调用抽象方法
public abstract void write(int b)
,
必须由 OutputStream
的子 class 实现。
在这种情况下,模板的不变部分是每个OutputStream
通用的基本错误处理,而模板的可变部分是实际编写,具体到每个具体实现。
您对模式的理解是正确的;但是,它不必那么复杂。基本上,任何在同一 class 中调用抽象方法的具体方法都是模板方法。
更具体地说:
在其实现中调用抽象方法的非抽象方法可以归类为模板方法。
Template_method 定义运算中算法的程序框架,将一些步骤推迟到子classes。如果将完整操作定义为抽象方法,子classes 将拥有更改算法骨架的完全控制权,因此抽象方法不会class 化为模板方法。
例如Reader class 在 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 {
}