zoukankan      html  css  js  c++  java
  • 设计模式之—模版方法模式

    1.模版方法的定义

    模版方法的英文定义为:

    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.

    翻译过来的意思是:

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

    这种模式在我们开发中经常会用到,一个简单的例子,我们在抽象类中定义若干个基本的操作,在具体的实现类中定义模版方法对基本方法实现聚合。这种实现方式就可以称为模版方法模式

    2.模版方法通用模版

    对于程序员来说,一天的工作中有很多个基本的工作项目组成,其中包括:签到、早会、需求讨论、功能开发、链调、午饭、bug修复等几项基本工作内容组成。而对于每一个人每天的工作流程又是不一样的,针对此功能,可以设计出以下类图:

    基本方法:

    其中签到、早会等基本工作项
    

    模版方法:

    模版方法为基本方法的不同组合,从而完成不同的逻辑,可以针对不同的组合定义不同的模版类,也可以在同一个类中实现不同的组合。
    

    代码如下:

    public abstract class WorkAbstractService {
    
        protected void sign(){
            //签到
        }
    
        protected void morningMeeting(){
            //早会
        }
    
        protected void requirementsDiscussion(){
            //需求讨论
        }
    
        protected void develop(){
            //功能开发
        }
    
        protected void eat(){
            //午饭
        }
    
        protected void debug(){
            //联调
        }
    
        protected void fixBug(){
            //修复bug
        }
    }
    
    public class WorkServiceImpl extends WorkAbstractService{
    
        public void workFlow1(){
            //签到-早会-需求讨论-午饭-开发-联调-修复bug
            sign();
            morningMeeting();
            requirementsDiscussion();
            eat();
            develop();
            debug();
            fixBug();
        }
    
        public void workFlow2(){
            //签到-需求讨论-开发-午饭-联调-修复bug
            sign();
            requirementsDiscussion();
            develop();
            eat();
            develop();
            fixBug();
        }
    
    }
    

    3.模版方法的优缺点

    优点:

    1.封装不变部分,扩展可变部分
    2.提取公共功能部分,便于维护
    

    4.模版方法的使用场景

    1.多个子类有公共的方法,并且逻辑基本相同
    2.重构的时候,模版方法是一个经常使用的模式,把相同的代码提取到父类中,然后通过钩子函数约束其行为。
  • 相关阅读:
    18.综合应用判断素数
    17.综合应用判断素数
    16.综合应用判断素数
    15.for循环的三个表达式是可以省略
    14.循环的理解
    myeclipse2014中搭建SSH环境注意事项
    Java web设计模式学习
    问题1:myeclipse中导入新JSP项目出现红色感叹号
    Java集合类学习笔记
    Java 复习第一部分:知识体系、变量、运算部分
  • 原文地址:https://www.cnblogs.com/vitasyuan/p/9538249.html
Copyright © 2011-2022 走看看