设计模式

模板方法模式(Template)

2020-07-18  本文已影响0人  秀儿2020

定义

定义一个操作中算法的框架,而降一些步骤延迟到子类执行,使得子类可以在不改变算法框架的基础上就可以重定义算法的某些步骤

本质

固定算法框架

登场角色

示例代码

/**
 * 算法框架抽象类
 */
public abstract class AbstractDisplay {
    abstract void open();
    abstract void print();
    abstract void close();
    public final void display(){
        open();
        for(int i=0;i<5;i++){
            print();
        }
        close();
    }
}


/**
 * 算法实现1
 */
public class CharDisplay extends AbstractDisplay {
    private char aChar;

    CharDisplay(char c){
        this.aChar = c;
    }

    @Override
    void open() {
        System.out.print("<<");
    }

    @Override
    void print() {
        System.out.print(aChar);
    }

    @Override
    void close() {
        System.out.println(">>");
    }
}


/**
 * 算法实现方式2
 */
public class StringDisplay extends AbstractDisplay{
    private String message;
    private int width;
    StringDisplay(String message){
        this.message = message;
        this.width = message.length();
    }
    @Override
    void open() {
        pringLine();
    }

    @Override
    void print() {
        System.out.println("|" + message + "|");
    }

    @Override
    void close() {
    pringLine();
    }

    private void pringLine(){
        System.out.print("+");
        for(int i=0;i<width;i++){
            System.out.print("-");
        }
        System.out.println("+");
    }
}


public class RunTemplate {
    public static void main(String[] args){
        AbstractDisplay charDisplay = new CharDisplay('a');
        AbstractDisplay stringDiaplay = new StringDisplay("message");
        System.out.println("这是第一种算法实现的输入内容:");
        charDisplay.display();
        System.out.println("这是第二种算法实现的输入内容:");
        stringDiaplay.display();
    }
}

运行结果

这是第一种算法实现的输入内容:
<<aaaaa>>
这是第二种算法实现的输入内容:
+-------+
|message|
|message|
|message|
|message|
|message|
+-------+

功能

模板方法的功能在于固定算法框架,而让具体的算法实现可以根据需要自己扩展,而又不偏离整体框架。即满足了子类的扩展,由固定了算法的步骤。模板方法的实现方式主要使用继承的方式。

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读