zoukankan      html  css  js  c++  java
  • Java 实现模板方法(TemplateMethod)模式

    类图


    /**
     * 业务流程模板。提供基本框架
     * @author stone
     *
     */
    public abstract class BaseTemplate {
    	
    	public abstract void part1();
    
    	public abstract void part2();
    
    	public abstract void part3();
    
    	//这里为了严格实验结果,使用final不可被重写
    	public final void useTemplateMethod() {
    		part1();
    		part2();
    		part3();
    	}
    }

    /**
     * 模板实现方式1
     * @author stone
     *
     */
    public class TemplateMethod extends BaseTemplate {
    
    	@Override
    	public void part1() {
    		System.out.println("模板方法1");
    	}
    
    	@Override
    	public void part2() {
    		System.out.println("模板方法2");
    	}
    
    	@Override
    	public void part3() {
    		System.out.println("模板方法3");
    	}
    
    }
    

    /**
     * 模板实现方式2
     * @author stone
     *
     */
    public class TemplateMethod2 extends BaseTemplate {
    
    	@Override
    	public void part1() {
    		System.out.println("模板方法11");
    	}
    
    	@Override
    	public void part2() {
    		System.out.println("模板方法22");
    	}
    
    	@Override
    	public void part3() {
    		System.out.println("模板方法33");
    	}
    	
    }

    /**
     * 模板方法(TemplateMethod)模式:行为型模式,定义了一系列操作的骨架,将模块的实现 延迟到实现类或者子类中实现。
     * 跟建造者模式的差别:
     * 		建造者模式。使用组合方式,由指挥者Director指挥组合的Builder建造。建造流程由Director控制。建造的模块方法由Builder实现
     * 		模板方法模式。由模板定义操作流程,由子类或实现类 实现详细的模块方法
     * 		综上。建造者模式灵活于模板方法模式
     * @author stone
     *
     */
    public class Test {
    	public static void main(String[] args) {
    		BaseTemplate tm = new TemplateMethod();
    		tm.useTemplateMethod();
    		
    		System.out.println("");
    		
    		BaseTemplate tm2 = new TemplateMethod2();
    		tm2.useTemplateMethod();
    	}
    }

    打印

    模板方法1
    模板方法2
    模板方法3
    
    模板方法11
    模板方法22
    模板方法33
    


  • 相关阅读:
    SQL Server的Execute As与连接池结合使用的测试
    为什么SQL语句Where 1=1 and在SQL Server中不影响性能
    [转]NGINX下配置CACHE-CONTROL
    ls列出当前目录包含子目录下面的所有文件的绝对路径
    [转]无法滚动到溢出容器的Flex项的顶部
    align-items和align-content的区别
    go实现快速排序
    [转]linux超级服务器inetd详解
    makefile 小记
    [转]gcc
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6805647.html
Copyright © 2011-2022 走看看