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();
    }
}
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(">>");
    }
}
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 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 < width; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}
public class Main {
    public static void main(String[] args){
        AbstractDisplay d1 = new CharDisplay('H');
        AbstractDisplay d2 = new StringDisplay("Hello,world");
        AbstractDisplay d3 = new StringDisplay("你好,世界");
        d1.display();
        d2.display();
        d3.display();
    }
}

在抽象类中可以实现一部分方法,但在接口中是无法实现方法的,因此在TemplateMethod模式中,无法用接口代替抽象类

posted @ 2020-03-10 08:33  fly_bk  阅读(171)  评论(0编辑  收藏  举报