Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1334058
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: 项目管理

2013-07-26 11:00:16

概述

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

适用性

    1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

    2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
      首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。
      最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

    3.控制子类扩展。
			

参与者

    1.AbstractClass
      定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。
      实现一个模板方法,定义一个算法的骨架。
      该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。

    2.ConcreteClass
      实现原语操作以完成算法中与特定子类相关的步骤。


类图

示例


  1. package com.sql9.actioned;  
  2.   
  3. /** 
  4.  * 模板方法模式 示例 
  5.  * @author iihero 
  6.  */  
  7.   
  8. abstract class Template {  
  9.     protected abstract void laterWork();  
  10.       
  11.     protected void step1() {  
  12.         System.out.println("执行明确的步骤1: step");  
  13.     }  
  14.       
  15.     protected void lastStep() {  
  16.         System.out.println("执行明确的步骤: lastStep");  
  17.     }  
  18.       
  19.     public void execute() {  
  20.         step1();  
  21.         laterWork();  
  22.         lastStep();  
  23.     }  
  24. }  
  25.   
  26. class CustomizedTemplate extends Template {  
  27.   
  28.     @Override  
  29.     protected void laterWork() {  
  30.         System.out.println("CustomizedTemplate: 在子类中执行后期任务");  
  31.     }  
  32. }  
  33.   
  34. public class TemplateMethodTest {  
  35.   
  36.     /** 
  37.      * @param args 
  38.      */  
  39.     public static void main(String[] args) {  
  40.         Template template = new CustomizedTemplate();  
  41.         template.execute();  
  42.     }  
  43.   
  44. }  



结果


  1. 执行明确的步骤1: step  
  2. CustomizedTemplate: 在子类中执行后期任务  
  3. 执行明确的步骤: lastStep  

阅读(2234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~