zoukankan      html  css  js  c++  java
  • 模板模式



    1. 模板模式(Template Method)

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


    简单来说:给出实现某件事的步骤顺序,这些顺序我们不能改变,我们只能改变步骤的内容。比如给出步骤顺序:1.动物先清洗 2. 动物吃食物 3. 动物去玩,其中(1,2,3)这些顺序不能改变,而具体清洗什么,吃什么。玩什么这些具体事情可以由子类重新定义



    2. 实现


    2.1 定义抽象模板类

    public abstract class Template {
    	
    	// 非模板方法可抽象或是具体的
    	abstract void clean();
    	abstract void eat();
    	abstract void play();
    	
    	// 模板方法修饰为final即不可重写,步骤规定不可变
    	public final void templateMethod(){
    		clean();
    		eat();
    		play();
    	}
    }
    

    2.2 创建模板类的子类Dog

    public class Dog extends Template {
    
    	@Override
    	void clean() {
    		System.out.println("狗先洗脚");
    	}
    
    	@Override
    	void eat() {
    		System.out.println("狗然后吃肉");
    	}
    
    	@Override
    	void play() {
    		System.out.println("狗然后在家玩");
    	}
    }
    

    2.3 创建模板类的子类Cat

    public class Cat extends Template {
    
    	@Override
    	void clean() {
    		System.out.println("猫先洗手");
    	}
    
    	@Override
    	void eat() {
    		System.out.println("猫然后吃鱼");
    	}
    
    	@Override
    	void play() {
    		System.out.println("猫最后出去玩");
    	}
    }
    

    2.4 测试

    public static void main(String[] args) {
    		
        new Dog().templateMethod();
        System.out.println("----------人工分割线-----------");
        new Cat().templateMethod();
    
    }
    
    狗先洗脚
    狗然后吃肉
    狗最后在家玩
    ----------人工分割线-----------
    猫先洗手
    猫然后吃鱼
    猫最后出去玩
    

    2.5 总结

    从上面的实现可以知道,我们可定义动物们的事件的内容,而这些事件的发生顺序是被规定好了,用了final修饰而不能重写该方法。 Spring的配置中使用模板模式,在往后的Spring博客中会有说明



  • 相关阅读:
    I.MX6 Parallel RGB LCD Datasheet描述
    ubuntu IP 扫描
    I.MX6 按键开关机 PMIC 检测
    java中对List中对象排序实现
    jQuery实现父窗口的问题
    如何在Oracle中复制表结构和表数据
    handsontable常规配置的中文API
    oracle中to_date详细用法示例(oracle日期格式转换)
    js中子页面父页面方法和变量相互调用
    关于Ajax的type为post提交方式出现请求失效问题
  • 原文地址:https://www.cnblogs.com/Howlet/p/12287072.html
Copyright © 2011-2022 走看看