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

    模板方法模式

    一、简介

    对于一个算法所需的关键步骤确定了顺序后,各个步骤的具体实现是未知的,如果遇到这类问题那么就可以采用模板方法模式解决。

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

    二、使用场景

    • 多个子类公有的方法并且逻辑基本相同时
    • 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
    • 重构时,模板方法模式可以把相同的代码抽取到父类中,然后通过钩子函数约束其行为

    三、简单实现

    这里以把大象放入冰箱为例来实现模板方法,我们知道把大象放入冰箱需要三步,三步顺序是固定的但是每一步具体实现是可变的,比如放入冰箱的可以是大象也可以是小象

        //抽象模板类
        public abstract class AbstractTemplate{
            protected void openfridgedoor(){
                Log.i(TAG, "openfridgedoor: 打开冰箱门");
            }
            protected void putElephant(){
                Log.i(TAG, "putElephant: 放入大象");
            }
            protected void closefridgedoor(){
                Log.i(TAG, "closefridgedoor: 关闭冰箱门");
            }
    
            public final void start(){
                openfridgedoor();
                putElephant();
                closefridgedoor();
                Log.i(TAG, "start: suc");
            }
        }
    
        //具体实现类
        public class SmallElephant extends AbstractTemplate{
            @Override
            protected void putElephant() {
                Log.i(TAG, "putElephant: 放入小象");        
            }
        }
        
        public void Test(){
            SmallElephant smallElephant=new SmallElephant();
            smallElephant.start();
        }
    

    四、小结

    Android中模板方法的应用可以参考AsyncTask或Activity声明周期函数。总结来说模板方法模式就是对流程的封装,即把某些固定流程封装到一个final函数中并让子类能够定制该流程中的步骤的实现。

    • 优点

    封装不变部分,扩展可变部分,提取公共代码便于维护

    • 缺点

    该模式会带来代码阅读难度会让用户觉得难以理解

  • 相关阅读:
    (转)分布式系统原理
    Java常用排序
    19.Java5同步集合类的应用
    18.Java5阻塞队列的应用
    17.Java5的Exchanger同步工具
    16.Java5的CountDownLatch同步工具
    15.Java5的CyclicBarrier同步工具
    14.Java5的Semaphere同步工具
    13.Java5条件阻塞Condition的应用
    Docker部署JavaWeb项目实战
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13804804.html
Copyright © 2011-2022 走看看