设计模式之03 Template Mthod模式
来源:互联网 发布:提高淘宝店铺流量 编辑:程序博客网 时间:2024/06/05 11:27
一、模板方法模式
在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式。
一些在模板方法中,我们可以使用抽象定义一个算法中的 一些步骤,模板方法确定他们的先后顺序,但方法的具体实现由子类负责。
二、模板方法举例
2.1 AbstractDisplay类
该类为抽象类,其中定义了四个方法,分别是display(),open(),pring(),close()。
display()方法中进行以下操作,调用open()方法,调用5次pringt方法,调用close()方法。
open(),print(),close()方法为抽象方法,由子类实现。
public abstract class AbstractDisplay {
/**
* 框架方法
*/
public final void display(){
open();
for(int i = 0 ; i<5 ;i++){
print();
}
close();
}
protected abstract void close();
protected abstract void print();
protected abstract void open();
}
2.2 CharDisplay类
该类继承AbstractDisplay类,用于显示字符。显示结果为<<hhhhhh>>
public class CharDisplay extends AbstractDisplay {
private char ch ;
public CharDisplay(char ch) {
this.ch = ch;
}
@Override
protected void close() {
System.out.println(">>");
}
@Override
protected void print() {
System.out.print(ch);
}
@Override
protected void open() {
System.out.print("<<");
}
}
2.3 StringDisplay类
该类用于显示字符串。
public class StringDisplay extends AbstractDisplay {
private String str;
public StringDisplay(String str) {
this.str = str;
}
@Override
protected void close() {
printLine();
}
@Override
protected void print() {
System.out.println("|"+str+"|");
}
@Override
protected void open() {
printLine();
}
private void printLine() {
System.out.print("+");
for(int i = 0 ;i < str.getBytes().length;i++){
System.out.print("-");
}
System.out.println("+");
}
}
public class Main {
public static void main(String[] args) {
AbstractDisplay charDisplay = new CharDisplay('c');
charDisplay.display();
AbstractDisplay stringDisplay = new StringDisplay("Hello world");
stringDisplay.display();
}
}
输出结果如下。
由抽象类定义方法,并定义方法的执行过程,子类实现具体方法。优点在于父类中模板方法中定义了算法,无需在每个子类中编写算法。
3.1 模板方法中的角色
AbstractClass 抽象类
抽象类中需要实现模板方法,并且声明模板方法中需要使用到的抽象方法。
ConcreteClass 具体类
该角色负责具体实现AbstractClass角色中的抽象方法。
0 0
- 设计模式之03 Template Mthod模式
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之 Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之Template
- 设计模式之模板模式:Template模式
- 设计模式之模板模式:Template模式
- 设计模式之Template(1)
- 设计模式之Template(模版)
- 技术交流是便宜的
- Linux 下编译VLC源码步骤--debug防止优化
- PathDexClassLoader 和 DexClassLoader 区别
- go-map的并发问题
- 原生socket客户端与服务器消息互传
- 设计模式之03 Template Mthod模式
- JavaScript实现CRC32函数
- [转]"我泡在GitHub上的177天"--github连击带来的惯性链正向促进.
- Appium(二) 官网下载+安装(win7)
- 算法--计算当天在该年是第几天
- 浅谈translate属性与相对定位、绝对定位的区别
- binary-tree-level-order-traversal-ii
- Spring 使用 DefaultAdvisorAutoProxyCreator创建AOP 小结
- 使用mobilenet训练自己的数据