zoukankan      html  css  js  c++  java
  • 【设计模式】22、模板模式

     1 package com.shejimoshi.behavioral.TemplateMethod;
     2 
     3 
     4 /**
     5  * 功能:抽象模板类
     6  * 时间:2016年3月10日下午9:02:32
     7  * 作者:cutter_point
     8  */
     9 public abstract class AbstractTemplate
    10 {
    11     public abstract void operator1();
    12     
    13     public abstract void operator2();
    14     
    15     public void templateMethod()
    16     {
    17         operator1();
    18         operator2();
    19         System.out.println("流程操作结束");
    20     }
    21 }
     1 package com.shejimoshi.behavioral.TemplateMethod;
     2 
     3 
     4 /**
     5  * 功能:具体实现调用末班
     6  * 时间:2016年3月10日下午9:04:44
     7  * 作者:cutter_point
     8  */
     9 public class GetUp extends AbstractTemplate
    10 {
    11 
    12     @Override
    13     public void operator1()
    14     {
    15         System.out.println("闹钟响了");
    16     }
    17 
    18     @Override
    19     public void operator2()
    20     {
    21         System.out.println("穿衣服,准备起床");
    22     }
    23 
    24 }
     1 package com.shejimoshi.behavioral.TemplateMethod;
     2 
     3 
     4 /**
     5  * 功能:具体实现相应的操作2
     6  * 时间:2016年3月10日下午9:06:27
     7  * 作者:cutter_point
     8  */
     9 public class GoToBed extends AbstractTemplate
    10 {
    11 
    12     @Override
    13     public void operator1()
    14     {
    15         System.out.println("脱衣服,准备上床");
    16     }
    17 
    18     @Override
    19     public void operator2()
    20     {
    21         System.out.println("上床盖好被子,准备睡觉");
    22     }
    23 
    24 }
     1 package com.shejimoshi.behavioral.TemplateMethod;
     2 
     3 
     4 /**
     5  * 功能:定义一个操作中的算法的骨架,而将一些步骤延迟到子类。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
     6  * 适用:一次性实现一个算法的不变部分,并将可变的行为留给子类来实现
     7  *         各子类中的公共的行为应被提取出来并集中到一个公共父类中以避免代码重复
     8  *         控制子类的扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展
     9  * 时间:2016年3月10日下午8:46:51
    10  * 作者:cutter_point
    11  */
    12 public class Test
    13 {
    14     public static void main(String[] args)
    15     {
    16         AbstractTemplate at;
    17         
    18         at = new GetUp();
    19         at.templateMethod();
    20         
    21         System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
    22         
    23         at = new GoToBed();
    24         at.templateMethod();
    25     }
    26 }

    测试结果:

    闹钟响了
    穿衣服,准备起床
    流程操作结束
    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    脱衣服,准备上床
    上床盖好被子,准备睡觉
    流程操作结束
    

      

  • 相关阅读:
    [CSP-S模拟测试]:军训队列(DP+乱搞)
    [CSP-S模拟测试]:stone(结论+桶+前缀和+差分)
    [CSP-S模拟测试]:bird(线段树优化DP)
    [CSP-S模拟测试]:maze(二分答案+最短路)
    [CSP-S模拟测试]:优化(贪心+DP)
    uoj132/BZOJ4200/洛谷P2304 [Noi2015]小园丁与老司机 【dp + 带上下界网络流】
    Miiler-Robin素数测试与Pollard-Rho大数分解法
    hdu4336 Card Collector 【最值反演】
    loj2542 「PKUWC2018」随机游走 【树形dp + 状压dp + 数学】
    loj2540 「PKUWC2018」随机算法 【状压dp】
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5263492.html
Copyright © 2011-2022 走看看