模板方法模式

模板方法模式

定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

  • TestPaper
public abstract class TestPaper {

    public void TestQuestion1() {
        System.out.println("最喜欢的水果[] a.西瓜 b.柚子 c.苹果 d.哈密瓜");
        System.out.println("答案:" + Answers()[0]);
    }

    public void TestQuestion2() {
        System.out.println("最喜欢的明星[] a.周杰伦 b.蔡依林 c.杨幂 d.林俊杰");
        System.out.println("答案:" + Answers()[1]);
    }

    public void TestQuestion3() {
        System.out.println("最喜欢的声优[] a.花泽香菜 b.小仓唯 c.崛江由衣 d.雨宫天");
        System.out.println("答案:" + Answers()[2]);
    }

    protected abstract String[] Answers();

}
  • TestPaperA

public class TestPaperA extends TestPaper {

    @Override
    protected String[] Answers() {
        return new String[]{"a", "b", "c"};
    }

}
  • TestPaperB

public class TestPaperB extends TestPaper {

    @Override
    protected String[] Answers() {
        return new String[]{"b", "d", "a"};
    }

}
  • TestPaperProgram

public class TestPaperProgram {

    public static void main(String[] args) {
        System.out.println("学生甲的问卷");
        TestPaper studentA = new TestPaperA(); //子类变量声明改为父类,利用了多态性,实现了代码复用
        studentA.TestQuestion1();
        studentA.TestQuestion2();
        studentA.TestQuestion3();

        System.out.println("学生乙的问卷");
        TestPaper studentB = new TestPaperB();
        studentB.TestQuestion1();
        studentB.TestQuestion2();
        studentB.TestQuestion3();

    }

}
  • 输出
学生甲的问卷
最喜欢的水果[] a.西瓜 b.柚子 c.苹果 d.哈密瓜
答案:a
最喜欢的明星[] a.周杰伦 b.蔡依林 c.杨幂 d.林俊杰
答案:b
最喜欢的声优[] a.花泽香菜 b.小仓唯 c.崛江由衣 d.雨宫天
答案:c
学生乙的问卷
最喜欢的水果[] a.西瓜 b.柚子 c.苹果 d.哈密瓜
答案:b
最喜欢的明星[] a.周杰伦 b.蔡依林 c.杨幂 d.林俊杰
答案:d
最喜欢的声优[] a.花泽香菜 b.小仓唯 c.崛江由衣 d.雨宫天
答案:a
  • 分析

抽象类,也就是一抽象模板,定义并实现了一个模板方法.这个模板方法一般是一个具体方法,它给出一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现.顶级逻辑也有可能调用一些具体方法

通俗来讲, TestPaper抽象类,总结了子类可以复用的代码,提供抽象方法交由子类实现,总的逻辑结构已经搭建好,一些步骤由不同子类实现,体现了子类之间的差异性.模板方法模式在日常生活中还是比较常遇到的,上面的例子较为简单,有兴趣的同学可以想想生活中有哪些模板方法的例子

  • 总结

模板方法模式是通过把不变的行为搬移到超类,去除子类中重复代码来体现它的优势,模板方法模式提供了一个很好的代码复用平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值