项目踩坑Android进阶Android技术知识

抓住问题核心——模板方法模式

2019-03-15  本文已影响14人  程序员丶星霖

《Android源码设计模式解析与实战》读书笔记(十五)
《Android源码设计模式解析与实战》PDF资料下载

一、模板方法简介

在面向对象开发过程中,通常会遇到一个问题,我们知道一个算法所需的关键步骤,并确定了步骤的执行顺序,但是某些步骤的具体实现是未知的。

1.1、定义

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

1.2、使用场景

二、简单示例

//抽象的Computer
public abstract class AbstractComputer {
    protected void powerOn() {
        System.out.println("开启电源");
    }
    protected void checkHardware() {
        System.out.println("硬件检查");
    }
    protected void loadOS() {
        System.out.println("载入操作系统");
    }

    protected void login() {
        System.out.println("小白的计算机无验证,直接进入系统");
    }

    /**
     * 启动计算机方法,步骤固定为开启电源、系统检查、加载操作系统、用户登录。
     * 该方法为final,防止算法框架被覆写。
     */
    public final void startUp() {
        System.out.println("------开机 START------");
        powerOn();
        checkHardware();
        loadOS();
        login();
        System.out.println("------关机 END------");
    }
}
/**
 * 程序员的计算机
 */
public class CoderComputer extends AbstractComputer {
    @Override
    protected void login() {
        System.out.println("程序员只需要进行用户和密码验证就可以了");
    }
}
public class MilitaryComputer extends AbstractComputer {

    @Override
    protected void checkHardware() {
        super.checkHardware();
        System.out.println("检查硬件防火墙");
    }

    protected void login() {
        System.out.println("进行指纹识别等复杂的用户验证");
    }
}
public class Test {
    public static void main(String[] args) {
        AbstractComputer comp = new CoderComputer();
        comp.startUp();

        comp = new MilitaryComputer();
        comp.startUp();
    }
}

输出结果:

模板方法模式.png

三、总结

模板方法模式可以概括为:流程封装。就是把某个固定的流程封装到一个final函数中,并且让子类能够定制这个流程中的某些或者所有步骤,这就要求父类提取共用的代码,提升代码的复用率,同时也带来了更好的可扩展性。

3.1、优点

3.2、缺点

学海无涯苦作舟

我的微信公众号
上一篇 下一篇

猜你喜欢

热点阅读