设计模式(三)之模版方法模式(Template method Pattern)
2009-11-04 17:24
537 查看
该模式就是在抽象父类中写一个具体方法,在该具体方法中列出其它抽象方法的总体调用流程,再在子类中实现这些抽象方法。下面的例子中有一个抽象父类AbstractDisplay和两个子类CharDisplay、StringDisplay。
父类中有具体方法display()和抽象方法open()、print()、close()。其中在display()方法中只是列出了对其它抽象方法的调用。
AbstractDisplay类:
package template;
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();
}
close();
}
}
CharDisplay类:
package template;
public class CharDisplay extends AbstractDisplay{
private char ch;
public CharDisplay(char ch){
this.ch=ch;
}
@Override
public void close() {
System.out.println(">>");
}
@Override
public void open() {
System.out.print("<<");
}
@Override
public void print() {
System.out.print(ch);
}
}
StringDisplay类:
package template;
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 close() {
printLine();
}
@Override
public void open() {
printLine();
}
@Override
public void print() {
System.out.println("|"+string+"|");
}
public void printLine(){
System.out.print("+");
for(int i=0;i<width;i++){
System.out.print("-");
}
System.out.println("+");
}
}
Main类:
package template;
public class Main {
public static void main(String[] args) {
AbstractDisplay ad1=new CharDisplay('H');
AbstractDisplay ad2=new StringDisplay("Hello,World");
AbstractDisplay ad3=new StringDisplay("你好!");
ad1.display();
ad2.display();
ad3.display();
}
}
父类中有具体方法display()和抽象方法open()、print()、close()。其中在display()方法中只是列出了对其它抽象方法的调用。
AbstractDisplay类:
package template;
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();
}
close();
}
}
CharDisplay类:
package template;
public class CharDisplay extends AbstractDisplay{
private char ch;
public CharDisplay(char ch){
this.ch=ch;
}
@Override
public void close() {
System.out.println(">>");
}
@Override
public void open() {
System.out.print("<<");
}
@Override
public void print() {
System.out.print(ch);
}
}
StringDisplay类:
package template;
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 close() {
printLine();
}
@Override
public void open() {
printLine();
}
@Override
public void print() {
System.out.println("|"+string+"|");
}
public void printLine(){
System.out.print("+");
for(int i=0;i<width;i++){
System.out.print("-");
}
System.out.println("+");
}
}
Main类:
package template;
public class Main {
public static void main(String[] args) {
AbstractDisplay ad1=new CharDisplay('H');
AbstractDisplay ad2=new StringDisplay("Hello,World");
AbstractDisplay ad3=new StringDisplay("你好!");
ad1.display();
ad2.display();
ad3.display();
}
}
相关文章推荐
- Python实现设计模式--04.模版方法模式(Template Method Pattern)
- Head First 设计模式 (八) 模版方法模式(Template method pattern) C++实现
- 设计模式之模版方法模式(Template Method Pattern)
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
- 设计模式之template method模版方法模式
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
- 设计模式(4)——模板方法模式(Template Method Pattern)
- .NET设计模式-模版方法(Template Method)
- 设计模式之(Template Method)模版方法模式
- 设计模式笔记11:模板方法设计模式(Template Method Pattern)
- 24种设计模式--模版方法模式【Template Method Pattern】
- 设计模式 - 模板方法模式(template method pattern) 具体解释
- (Boolan)C++设计模式 <二> ——模版方法(Template Method)
- .NET设计模式(16):模版方法(Template Method)
- 黑马程序员-Java_模版方法设计模式(Template Pattern)
- 设计模式与泡mm的关系之template method模版方法模式及再思考
- 设计模式 笔记 模版方法模式 Template Method
- 设计模式拾荒之模板方法模式( Template Method Pattern ): 与工厂方法模式之间的情侣关系
- 23种设计模式(13)_行为型_模版方法模式(Template Method)
- 设计模式(11)——模板方法模式(Template Method Pattern,行为型)