zoukankan      html  css  js  c++  java
  • 设计模式(10)-----模板方法模式

    模板方法模式(Template Method)

    定义

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

    UML类图

      

    例子

      AbstractClass

    package com.csdhsm.pattemdesign.template;
    
    /**  
     * @Title:  Templete.java   
     * @Description: 模板父类,包含子类相同部分,子类自己完成的部分
     * @author: Han   
     * @date:   2016年6月21日 下午10:03:44  
     */  
    public abstract class Templete {
    
        //每个子类相同的执行方法
        public void topOperation() {
            beforeOperation();
            operation();
            afterOperation();
        }
        
        //每个子类不同的地方,延迟到子类去完成
        public abstract void operation();
        
        //已经定义好的方法,写在父类,避免重复
        private final void beforeOperation() {
            System.out.println("This acton before the operation!");
        }
    
        private final void afterOperation() {
            System.out.println("This acton after the operation!");
        }
    }

      模板方法1

    package com.csdhsm.pattemdesign.template;
    
    /**  
     * @Title:  TempleteMethod1.java   
     * @Description: 模板方法1
     * @author: Han   
     * @date:   2016年6月21日 下午10:01:35  
     */  
    public class TempleteMethod1 extends Templete {
    
        @Override
        public void operation() {
            System.out.println("I`m Templete Method 1");
        }
    }

      模板方法2

    package com.csdhsm.pattemdesign.template;
    
    /**  
     * @Title:  TempleteMethod2.java   
     * @Description: 模板方法2
     * @author: Han   
     * @date:   2016年6月21日 下午10:02:02  
     */  
    public class TempleteMethod2 extends Templete {
    
        @Override
        public void operation() {
            System.out.println("I`m Templete Method 2");
        }
    }

      客户端

    package com.csdhsm.pattemdesign.template;
    
    public class Solution {
        public static void main(String[] args) {
            
            Templete templete1 = new TempleteMethod1();
            Templete templete2 = new TempleteMethod2();
            
            templete1.topOperation();
            templete2.topOperation();
        }
    }

      结果

      OK,成功。

    总结

      模板方法模式是通过把不变的行为搬移到父类(原则:不写一句重复的代码),出去子类中的重复代码,体现优势。模板方法提供了一个很好的代码服用的模板。

  • 相关阅读:
    第11组 Beta冲刺(1/5)
    第11组 Alpha事后诸葛亮
    第11组 Alpha冲刺(6/6)
    第11组 Alpha冲刺(5/6)
    软工实践个人总结
    第11组 Beta版本演示
    第11组 Beta冲刺(5/5)
    第11组 Beta冲刺(4/5)
    第11组 Beta冲刺(3/5)
    第11组 Beta冲刺(2/5)
  • 原文地址:https://www.cnblogs.com/a294098789/p/5605194.html
Copyright © 2011-2022 走看看