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();
    
        }
    
    }

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

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

  • 相关阅读:
    008 第八篇:爬虫实战(数据可视化之pyecharts)
    案例一 微信聊天机器人
    008 第八篇:爬虫实战
    007 第七篇:分布式爬虫
    006 第六篇:Scrapy框架
    005 第五篇:爬虫高性能相关
    004001 第四篇:存储库简单版之mongodb,redis,mysql
    003 第三篇:解析库之re、beautifulsoup、pyquery
    002 第二篇:请求库之requests,selenium
    001 第一篇:爬虫基本原理
  • 原文地址:https://www.cnblogs.com/yangwei20160911/p/6941321.html
Copyright © 2011-2022 走看看