您的位置:首页 > 编程语言 > Java开发

java设计模式之Template Method模式 ——将具体处理交给子类

2017-06-04 23:34 399 查看

1.Template Method模式:

在父类(抽象类)中定义处理流程的框架(父类的抽象方法),

在子类中实现具体的处理(实现父类的抽象方法)。

2.示例程序

共4个类:

AbstractDisplay :

定义非抽象普通方法display();
定义抽象方法open(),print(),close()(由子类实现);
在display()中依次调用了open(),print(),close()这3个方法(即实现display());


CharDisplay:

继承AbstractDisplay ,实现AbstractDisplay 中的抽象方法open(),print(),close();


StringDisplay:

继承AbstractDisplay ,实现AbstractDisplay 中的抽象方法open(),print(),close();


Main:

用于测试程序行为;


类图



代码

AbstractDisplay.java

package com.wang;

public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();

public final void display(){
open();
for (int i = 0; i < 5; i++) {
print();//循环调用5次
}
close();
}

}


CharDisplay .java

package com.wang;

public class CharDisplay extends AbstractDisplay{
private char 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(">>");
}

}


StringDisplay.java

package com.wang;

public class StringDisplay extends AbstractDisplay {
private int width;
private String string;

public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}

@Override
public void open() {
printLine();
}
@Override
public void print() {
System.out.println("|" + string + "|");
}
@Override
public void close() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < this.width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}


Main .java

package com.wang;

public class Main {

public static void main(String[] args) {
//生成一个持有“H”的CharDisplay类实例
AbstractDisplay d1 = new CharDisplay('H');
//生成一个持有“Hello,world”StringDisplay类实例
AbstractDisplay d2 = new StringDisplay("hello,world");
//生成一个持有“你好,世界”的StringDisplay
AbstractDisplay d3 = new StringDisplay("你好,世界.");
d1.display();
d2.display();
d3.display();
}

}


运行结果:



[b]敲黑板敲黑板[/b]

System.out.println();//最后的ln相当于/n,表示此句打印会换行。

System.out.print()则不换行打印。

抽象类作用:虽然抽象类不能生成实例看似无用,但实际上可以通过抽象方法的名字在抽象阶段里确定处理的流程,这一点也是非常重要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: