《Android源码设计模式》读书笔记 (15) 第15章 模板方法模式
来源:互联网 发布:nginx static 配置 编辑:程序博客网 时间:2024/05/20 17:42
前言
- 这个模式也是之前见得比较少的.
- 用一句话来形容就是:流程封装,具体实现由子类来完成.但是任意一个抽象类,都符合具体实现细节由子类完成的要求,关键在于是否有流程,有流程的叫模板方法模式,没有流程,就是抽象类的实现.
定义
- 定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 可以联想下我们平时用到的OKhttpUtils网络连接框架,是否是该模板方法设计模式的一个典型的实现.
- 优点:
1.封装不变部分,扩展可变部分
2.提取公共部分代码,便于维护 - 缺点:模板方法会带来代码的阅读难度,会让用户觉得难以理解.
- 使用场景:
1.多个子类有公有的方法,并且逻辑基本相同.
2.重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现.
3.重构时,模板方法模式是一个经典的使用模式.
UML类图
- AbsTemplate:抽象类,定义了一套算法框架
- ConcreteImplA:具体实现类A
- ConcreteImplB:具体实现类B
实现步骤
- 根据书上提供的电脑开机在不同电脑上,也就是不同环境下,需要修改某些特定的步骤,但是不能改变开机的算法框架.
- AbstractComputer:AbsTemplate的作用,提供开机必要的4个步骤方法以及开机算法框架
/** * 抽象的computer,提供开机必要的4个步骤方法以及开机算法框架 * @author max * */public abstract class AbstractComputer { // 开电源 public void powerOn() { } // 硬件检测 public void check() { } // 载入操作系统 public void loadOS() { } // 开用户登录 public void login() { } //开机算法框架 public final void startUp(){ powerOn(); check(); loadOS(); login(); }}
- CoderComputer和MilitaryComputer:在不同环境下,需要修改某些特定的步骤
/** * 军用计算机,具体的子类 * @author max * */public class MilitaryComputer extends AbstractComputer { //然而军用的电脑,更关心硬件防火墙和登录这块的安全性,重定义当前开机框架的登录和ckeck步骤的方法即可 @Override public void check() { super.check(); } @Override public void login() { super.login(); }}
/** * 程序员的计算机,具体的子类 * @author max * */public class CoderComputer extends AbstractComputer { //程序员的电脑,只需要关系登录这块,重定义当前开机框架的登录步骤的方法即可 @Override public void login() { super.login(); }}
- client:最后即客户端调用
//模板方法的调用 private void templateMothed() { AbstractComputer computer = new CoderComputer(); computer.startUp(); computer = new MilitaryComputer(); computer.startUp(); }
源码下载
源码demo下载.http://download.csdn.net/detail/qq_28690547/9438332
0 0
- 《Android源码设计模式》读书笔记 (15) 第15章 模板方法模式
- 《HeadFirst设计模式》读书笔记-第8章-模板方法模式
- 《Android源码设计模式解析与实战》读书笔记(十五)——模板方法模式
- 设计模式读书笔记-----模板方法模式
- 设计模式读书笔记-----模板方法模式
- 设计模式读书笔记-----模板方法模式
- Android设计模式源码解析之模板方法模式
- Android设计模式源码解析之模板方法模式
- 《Android源码设计模式》读书笔记 (1) 第1章 单例模式
- 《Android源码设计模式》读书笔记 (4) 第4章 原型模式
- 《Android源码设计模式》读书笔记 (5) 第5章 工厂模式
- 《Android源码设计模式》读书笔记 (12) 第12章 观察者模式
- 《Android源码设计模式》读书笔记 (6) 第6章 抽象工厂模式
- 《Android源码设计模式》读书笔记 (7) 第7章 策略模式
- 《Android源码设计模式》读书笔记 (8) 第8章 状态模式
- 《Android源码设计模式》读书笔记 (9) 第9章 责任链模式
- 《Android源码设计模式》读书笔记 (10) 第10章 解释器模式
- 《Android源码设计模式》读书笔记 (11) 第11章 命令模式
- 1022. Digital Library (30)
- ZOJ-3204-Connect them【6th浙江省赛】【最小生成树】
- STM32-GPIO—JTAG
- c++primer阅读笔记之数组与指针
- BZOJ 1178 APIO 2009 会议中心
- 《Android源码设计模式》读书笔记 (15) 第15章 模板方法模式
- iOS 警告收录及科学快速的消除方法
- 驱动事件对象
- ZOJ-3207-80ers' Memory【6th浙江省赛】【STL】
- Bresenham 算法详解
- Servlet JSP
- 1. smarty 模板技术(1)
- iOS查看沙盒某文件夹下的文件
- ruby on rails爬坑(四):使用AWS S3存取数据