设计模式:模板方法模式
什么是模板方法模式
模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和C++模板没有关连。
模板方法模式的结构是什么
-
AbstractClass:抽象类
-
ConcreteClass:具体类
-
TemplateMethod():模板方法
-
PrimitiveOperation1():基本方法1
-
PrimitiveOperation2():基本方法2
-
PrimitiveOperation3():基本方法3
模板方法模式的一个实例
有一个抽象数据读取器(DataViewer),具体数据读取器继承自这个类,如果是文本具体数据读取器(TextViewer)则统计字数,如果是图像数据读取器(ImageViewer)则不统计。
实例代码
DataViewer
public abstract class DataViewer {
public abstract void readData();
public abstract void display();
public abstract boolean isText();
public abstract void calcWords();
public void handle(){
readData();
if (isText()){
calcWords();
}
display();
}
}
TextViewer
public class TextViewer extends DataViewer {
@Override
public void readData() {
System.out.println("Read txt.");
}
@Override
public void display() {
System.out.println("Display txt.");
}
@Override
public boolean isText() {
return true;
}
@Override
public void calcWords() {
System.out.println("Calc words.");
}
}
ImageViewer
public class ImageViewer extends DataViewer {
@Override
public void readData() {
System.out.println("Read image.");
}
@Override
public void display() {
System.out.println("Display image.");
}
@Override
public boolean isText() {
return false;
}
@Override
public void calcWords() {
}
}
Client
public class Client {
public static void main(String[] args){
DataViewer dataViewer = new TextViewer();
dataViewer.handle();
dataViewer = new ImageViewer();
dataViewer.handle();
}
}
实例结果
Read txt.
Calc words.
Display txt.
Read image.
Display image.
(完)