zoukankan      html  css  js  c++  java
  • 设计模式之三 模板模式

    模板方法模式定义:

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

    image

    • 基本方法:

    基本方法也叫做基本操作,是由子类实现,并且在父类的模板方法中调用

    • 模板方法:

    可以有一个或几个,实现对基本方法的调用,完成固定的逻辑.

    • 直接上通用的代码:
    public abstract class  AbstractClass {
        // 子类去完成....
        protected abstract   void  doAnything() ;
        
        //
        protected abstract  void  doSomething();
        
        // 模板具体实现
        public void  templateMethod() {
             System.out.println( this.getClass().getName()+ "调用模板基类的方法");
            /**
             * 调用基本方法,完成逻辑....
             */
            this.doAnything();
            this.doSomething();
            
        }
    
    }
    
    public class ConcreteClass1 extends AbstractClass {
    
        /* 完成自己的一些事情.....
         * <p>Title: doAnything</p> 
         * <p>Description: </p>  
         * @see com.spt.pattern.AbstractClass#doAnything() 
         */
        @Override
        protected void doAnything() {
            // TODO Auto-generated method stub
    
        }
    
        /* (具体实现
         * <p>Title: doSomething</p> 
         * <p>Description: </p>  
         * @see com.spt.pattern.AbstractClass#doSomething() 
         */
        @Override
        protected void doSomething() {
            // TODO Auto-generated method stub
    
        }
    
    }
    
    public class ConcreteClass2 extends AbstractClass {
    
        /* 具体实现.....
         * <p>Title: doAnything</p> 
         * <p>Description: </p>  
         * @see com.spt.pattern.AbstractClass#doAnything() 
         */
        @Override
        protected void doAnything() {
            // TODO Auto-generated method stub
    
        }
    
        /* 具体实现....
         * <p>Title: doSomething</p> 
         * <p>Description: </p>  
         * @see com.spt.pattern.AbstractClass#doSomething() 
         */
        @Override
        protected void doSomething() {
            // TODO Auto-generated method stub
    
        }
    
    }
    
    public class TemplateClient {
    
        public static void main(String[] args) {
            //
            AbstractClass  templateClass1 = new ConcreteClass1();
            AbstractClass  templateClass2 = new ConcreteClass2();
            
            templateClass1.templateMethod();
            templateClass2.templateMethod();
    
        }
    
    }
    • 模板方法使用的场景:

    多个子类有公有的方法,并且逻辑基本相同时。

    重要,复杂的算法,可以把核心的算法设计为模板的方法,周边相关的细节功能由各个子类实现。

    重构时,模板方法模式是一个经常使用的模式。把相同的的代码抽取到父类中,然后通过钩子函数约束其行为。

    • 模板模式的扩展:

    image

  • 相关阅读:
    JS设计模式的坑
    nth-child()和nth-of-type()的区别,以及如何在nth中添加变量和表达式
    for循环中,使用闭包和不使用闭包的区别以及原因
    JS闭包的基础知识,闭包的本质,闭包的作用,闭包的间谍属性和闭包的遗憾
    前端和后端数据交互的基本知识和常见方式
    dedecms手机PC同步更新插件的bug修复和前后端调试的经验
    065 女神颜值打分系统
    029 令牌桶算法限流
    04-01 集成学习基础
    028 【博弈论】关于三姬分金(五海盗分赃)的博弈论问题分析
  • 原文地址:https://www.cnblogs.com/tjxwg/p/4058665.html
Copyright © 2011-2022 走看看