“组件协作”模式----Template Method

1.模板方法模式动机

某一项任务,常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有原因(比如框架和应用之间的关系)而无法和任务的整体结构同时实现
在稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求。

2.问题的引入–标准化考试

标准化考试比较客观,题目相同
定义一个抽象类,具体方法实现相同的部分
抽象方法实现不同部分

class TestPaper
{
   public void TestQuestion1()
   {
      System.out.println("杨过得到,后来给了郭靖,炼成倚天剑,屠龙刀的玄铁可能是【】a.球磨铸铁 b.马口铁 c.高速合成金钢 d.碳素纤维");
      System.out.println("答案:"+Answer1());
   }
   public void TestQuestion2()
   {
      System.out.println("杨过,程英,陆无双铲除了情花,造成【】a.使这种植物不再害人b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡d.造成该地区沙漠化");
      System.out.println("答案:"+Answer2());
    }
    public void TestQustion3()
    {
         System.out.println("蓝凤凰致使华山师徒,桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药【】a.阿司匹林 b.氟哌酸 c.让他们喝大量的生牛奶 e.以上都错");
         System.out.println("答案:"+Answer3());
      }
     protected String Answer1()
     {  return "";   }
     protected String Answer2()
     {  return "";   }
     protected String Answer3()
     {  return "";   }
     //这些方法可以被继承给子类重写,子类只需要重写这些方法把答案填上,因为父类建立了所有重复的模板。

  
//客户端代码
public class program{
   public static void main(String[] args){
     System.out.println("学生甲抄的试卷:");
     //子类变量的声明改成父类,利用多态性,实现代码重用
     TestPaper studentA=new TestPaperA();
     studentA.TestQuestion1();
     studentA.TestQuestion2();
     studentA.TestQuestion3();

     System.out.println("学生乙抄的试卷:");
     TestPaper student B=new TestPaperB();
     studentA.TestQuestion1();
     studentA.TestQuestion2();
     studentA.TestQuestion3();
     
     

3.模板方法的特点

模板方法通过把不变行为搬移到超类,去除子类中的重复代码
提供了一个代码复用平台
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。模板方法把这些行为搬移到单一的地方
是基于继承的代码复用的基本技术

4.优缺点

实现代码复用
缺点:
算法骨架不容易升级(模板和子类是非常耦合的)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值