什么是模板方法模式

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和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.

(完)