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

    我们首先看一下模板方法的定义:

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

    Template Method Pattern:  Define the skeleton of an algorithm in an  operation, deferring some steps to subclasses. Template Method lets  subclasses redefine certain steps of an algorithm without changing the  algorithm's structure.

    我们定义一个抽象类WorkTemplate,该类中定义一个模板方法doWork()定义了一天上班的过程框架,同时提供了一些基本的方法,子类可以覆盖基本方法来实现自己的上班过程。

    package com.templateMethod;
    
    public abstract class WorkTemplate {
    	
    	//定义的模板方法,定义了一个过程的框架
    	public void doWork(){
    		goToWork();
    		if(!isFestival()){
    			Work();
    		}
    		goOffWork();
    		
    	}
    	
    	//定义基本方法,是模板方法的组成部分
    	public abstract int goToWork();//抽象方法
    	public void  Work(){//具体方法
    		System.out.println("正在干体力活");
    	}
    	public abstract int goOffWork();
    	public  boolean isFestival(){//hook method,钩子方法
    		return true;
    	}
    
    }
    

     下面我们提供两个实现类

    package com.templateMethod;
    
    public class WorkTemplateImpl extends WorkTemplate{
    
        @Override
        public int goToWork() {
            System.out.println("去上班。。。");
            return 0;
        }
    
        @Override
        public void Work() {
            System.out.println("正在干活。。。");
            
        }
    
        @Override
        public int goOffWork() {
            System.out.println("下班了。。。。");
            return 0;
        }
    
        @Override
        public boolean isFestival() {
            // 默认是要干活的
            return false;
        }
        
    
    }
    package com.templateMethod;
    
    public class WorkTemplateImpl2 extends WorkTemplate{
    
        @Override
        public int goToWork() {
            System.out.println("去上班。。。");
            return 0;
        }
    
    
        @Override
        public int goOffWork() {
            System.out.println("下班了。。。。");
            return 0;
        }
    
    
        @Override
        public boolean isFestival() {
            // TODO Auto-generated method stub
            return false;
        }
    
    
    
    }

    测试类

    package com.templateMethod;
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            WorkTemplate template=new WorkTemplateImpl2();
            template.doWork();
    
        }
    
    }

       模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式

     模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系

  • 相关阅读:
    Hadoop学习之路(十四)MapReduce的核心运行机制
    Hadoop学习之路(十三)MapReduce的初识
    Hadoop学习之路(十二)分布式集群中HDFS系统的各种角色
    Hadoop学习之路(十一)HDFS的读写详解
    Hadoop学习之路(十)HDFS API的使用
    Hadoop学习之路(九)HDFS深入理解
    Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境
    Guava的使用
    如何用纯 CSS 创作一个过山车 loader
    如何用纯 CSS 创作一组昂首阔步的圆点
  • 原文地址:https://www.cnblogs.com/yangwei20160911/p/6941321.html
Copyright © 2011-2022 走看看