标签:public 面向 类重写 pattern 图片 使用 sign inpu bst
对于不了解的模板设计模式的来说,可以认为如同古代的造纸术一样,纸所以成型,取决于用了模板的形状,形状又由镂空的木板组成,而你想要造什么纸,又取决于你使用什么材料. 上面提到了两个关键点 <<模板>> <<材料>>
如同我们在父类中定义处理流程的框架,而在子类中实现具体处理的模板称之为template method 模板设计模式
StringDisplay: 同上
这里要说明一下,子类应该与父类进行协作开发,因为子类具体去做什么不能随意去写,应该根据父类具体的处理流程去定义相应的处理过程,当然可以把文档写清楚,
AbstractDisplay
package base.template;
/**
* @program: DesignPatterns
* @description: 只实现display方法抽象类
* @author: Mr.Dai
* @create: 2018-04-28 16:12
**/
public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
/**
* 实现打印5次的方法
*/
public void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
package base.template;
/**
* @program: DesignPatterns
* @description: 实现单个字符的打印
* @author: Mr.Dai
* @create: 2018-04-28 16:15
**/
public class CharDisplay extends AbstractDisplay {
private Character ch;
public CharDisplay(char ch) {
this.ch=ch;
}
@Override
public void open() {
System.out.print("<<<");
}
@Override
public void print() {
System.out.print(ch);
}
@Override
public void close() {
System.out.println(">>>");
}
@Override
public void display() {
super.display();
}
}
package base.template;
/**
* @program: DesignPatterns
* @description: 实现对个字符串打印
* @author: Mr.Dai
* @create: 2018-04-28 16:18
**/
public class StringDisplay extends AbstractDisplay {
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
@Override
public void open() {
printline();
}
private void printline() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
@Override
public void print() {
System.out.println("|"+string+"|");
}
@Override
public void close() {
printline();
}
@Override
public void display() {
super.display();
}
}
在java.io.inputstream 使用模板的方法,如下图UML
在abstractdisplay 不使用接口而使用抽象类的原因是 需要在定义模板过程的时候 确定相应的算法过程.
标签:public 面向 类重写 pattern 图片 使用 sign inpu bst
原文地址:https://www.cnblogs.com/dgwblog/p/8968891.html