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.重构的时候,模版方法是一个经常使用的模式,把相同的代码提取到父类中,然后通过钩子函数约束其行为。
  • 相关阅读:
    c:forTokens标签循环输出
    jsp转long类型为date,并且格式化
    spring中@Param和mybatis中@Param使用区别(暂时还没接触)
    734. Sentence Similarity 有字典数组的相似句子
    246. Strobogrammatic Number 上下对称的数字
    720. Longest Word in Dictionary 能连续拼接出来的最长单词
    599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
    594. Longest Harmonious Subsequence强制差距为1的最长连续
    645. Set Mismatch挑出不匹配的元素和应该真正存在的元素
    409. Longest Palindrome 最长对称串
  • 原文地址:https://www.cnblogs.com/vitasyuan/p/9538249.html
Copyright © 2011-2022 走看看