Java设计模式之 模板语法设计模式

Java设计模式之 模板语法设计模式

一、简介和使用场景

当我们想要定义一个框架模板,大体流程确定下来,但是具体流程内容不确定,这时可以使用 模板语法设计模式。不仅可以共用公共的代码,提到代码复用性;还可以约束整个子类的大体行为,确定框架模板。

比如我们一张电子试卷,选择题–》填空题–》简单题–》大题–》压轴题,整个试卷的框架定义下来,但是试卷中每个类型的题目是随机的。我们可以用模板语法来定义,先定义整个流程框架,然后再让子类重写每个流程节点的。

二、具体实现

// 父类
public abstract class TemplateMethodsModel {

    // 1.提供模板方法。
    //      final 是为避免子类去修改模板。
    public final String write(){
        String header = "\n\t《我的好爸爸》";
    // 3.调用抽象方法。
    //         抽象方法会被子类重写,从而实现子类多态,不同的子类可以实现不同的方法
        String content = writeContent();
        String footer = "\n这就是我的好爸爸,我非常爱他。";
        return header + content + footer;
    }

    // 2.提供抽象方法供子类重写。
    //         abstract 抽象方法是为了让强制子类重写,从而实现多态。
    public abstract String writeContent();
}

//子类son
class Son extends TemplateMethodsModel{

	// 4.子类重写抽象方法
    @Override
    public String writeContent() {
        return "\n我的父亲非常严格,每当我犯了错误的时候,便会揍我。" +
                "父亲就像修剪一个小树,修剪我的枝枝丫丫,伴我长成参天大树。";
    }
}

// 子类daughter
class Daughter extends TemplateMethodsModel{

   // 4.子类重写抽象方法
    @Override
    public String writeContent() {
        return "\n我的爸爸非常温柔,每当我犯错的时候,常常安慰我。" +
                "父亲就像一棵参天大树,为我遮挡风雨。";
    }
}

//测试类
class test3 {
    public static void main(String[] args) {
        TemplateMethodsModel son = new Son();
        System.out.println(son.write());

        TemplateMethodsModel daughter = new Daughter();
        System.out.println(daughter.write());
/*结果:
	《我的好爸爸》
我的父亲非常严格,每当我犯了错误的时候,便会揍我。父亲就像修剪一个小树,修剪我的枝枝丫丫,伴我长成参天大树。
这就是我的好爸爸,我非常爱他。

	《我的好爸爸》
我的爸爸非常温柔,每当我犯错的时候,常常安慰我。父亲就像一棵参天大树,为我遮挡风雨。
这就是我的好爸爸,我非常爱他。
*/
    }
}

三、总结

  • 步骤:

    • 首先在父类中定义模板框架方法,
    • 然后再在父类中定义流程子节点抽象方法,
    • 再然后父类框架中调用这些抽象方法。
    • 最后,由子类继承父类并且重写抽象方法。
  • 执行流程:

    • 首先实例对象调用父类的write()方法。(该方法 finnal,子类不能重写,这样只能调用父类的该方法)
    • 其次执行 write() 方法时,会调用抽象方法,由于多态原因,调用的抽象方法会优先执行子类的重写的方法 writeContent()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值