设计模式(三)之模板方法模式

什么是模板方法模式

模板方法模式是一种行为设计模式,组成模板的方法在父类中定义,这些方法都是抽象方法,具体的方法在其子类。像这样在父类中定义处理流程的框架,在子类中实现具体处理的模式就叫做模板方法模式

例子

根据字符或字符串打印结果,打印字符或字符串都需要open、print、close操作,故将这些方法定义在模板中。TemplateDisplay为模板,CharDisplay和StringDisplay为其子类,CharDisplay负责打印字符,StringDisplay负责打印字符串。

TemplateDisplay

package BehavioralPattern.TemplateMode;

/**
 * 展示模板
 */

public abstract class TemplateDisplay {
    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 BehavioralPattern.TemplateMode;

/**
 * 字符打印
 */

public class CharDisplay extends TemplateDisplay{
    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(">>");
    }
}

StringDisplay

package BehavioralPattern.TemplateMode;

/**
 * 字符串打印
 */

public class StringDisplay extends TemplateDisplay {
    private String s;
    private int len;

    public StringDisplay(String s) {
        this.s = s;
        len = s.getBytes().length;
    }

    @Override
    public void open() {
        printLine();
    }

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

    @Override
    public void close() {
        printLine();
    }

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

Main

package BehavioralPattern.TemplateMode;

/**
 * Main
 */

public class Main {
    public static void main(String[] args) {
        TemplateDisplay d1 = new CharDisplay('H');
        TemplateDisplay d2 = new StringDisplay("hello,world");
        d1.display();
        System.out.println();
        d2.display();
    }
}

结果
在这里插入图片描述
可以看到字符串和字符共用一套父类模板,父类提供执行过程,子类对执行过程的细节进行刻画,打印出不同的结果。

总结

模板方法的核心思想是:父类定义骨架,子类实现某些细节。
父类的模板方法一般声明为final,防止子类继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值