模板方法,和单例模式是我认为GOF的23中最简单的两种模式。
但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分,是面向对象的一种基本认识。
打比方说父亲有很多理想,就行医救人吧,但是父亲医术不行,只能靠儿子,儿子长大后遵从父亲大志,春风拂面,妙手回春,实现了父亲的理想,儿子做的事情早在出生前就定下来了,是父亲之前久定好的模板。
认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。
本文以View中的draw方法为例,展开分析。
模板方法,TemplateMethod,光是学习这个模式,就会对你产生长远影响的一个模式。
1.意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
热门词汇:骨架 步骤 结构 延迟到子类
2.结构
定义了几个步骤1,2,3等,在模板方法中按照一定的结构顺序执行这些步骤。父类的方法可以有缺省实现,也可以是一个空实现,即所谓的钩子操作。
结合实际情况,我们画出View中draw方法涉及到的几个步骤方法如下:
学习模板方法对于我们了解框架的基类实现,生命周期和流程控制非常有帮助,我觉得是务必要掌握的一个模式。
3.代码
- public class View{
- /**
- * 钩子操作,空实现
- */
- protected void onDraw(Canvas canvas) {
- }
- /**
- *钩子操作,空实现
- */
- protected void dispatchDraw(Canvas canvas) {
- }
- //算法骨架
- public void draw(Canvas canvas) {
- if (!verticalEdges && !horizontalEdges) {
- // 步骤1
- if (!dirtyOpaque) onDraw(canvas);
- // 步骤2
- dispatchDraw(canvas);
- // 步骤3
- onDrawScrollBars(canvas);
- return;
- }
- }
- //... ...
- }
我们看看系统组件TextView的实现:
- public class TextView{
- @Override
- protected void onDraw(Canvas canvas) {
- //大量自定义实现代码
- }
- }
如果我们自定义View的话,我们一般也是重写onDraw方法即可:
- public class MyView extends View {
- public MyView(Context context) {
- super(context);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- }
- @Override
- protected void dispatchDraw(Canvas canvas) {
- super.dispatchDraw(canvas);
- }
- }
4.效果
(1).模板方法是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。
(2).模板方法导致一种方向控制结构,"好莱坞法则":"Don't call me,i will call you.",即一个父类调用子类的操作,而不是相反。
(3).模板调用操作的类型有具体的操作,具体的AbstracClass操作,原语操作,工厂方法,钩子操作。少定义原语操作。
(4).android中对这些重定义操作的命名喜欢在方法前加一个前缀on。
(5).模板方法使用继承来改变算法的一部分。策略模式使用委托来改变整个算法。
出自:http://mobile.51cto.com/ahot-418992.htm
相关推荐
详细讲解了组合模式、观察者模式、单例模式、模板方法模式、备忘录模式、享元模式、命令模式、工厂方法模式、适配器模式 原型模式等10个Android设计模式,和CSDN上其他讲Android设计模式的文章完全不同。讲解详细,...
本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,...
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
设计模式系列23种设计模式设计模式是一套被反复使用,多数人知道的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。本文将介绍23种设计模式。创建型...
它有助于提高开发速度,并且使用设计模式模板更快地开发原型解决方案可以提高编码效率、可维护性和代码可读性。 设计模式的类型: 以下是不同类型的设计模式: 创意设计模式 结构设计模式 行为设计模式。 1. 创造...
非常简单的模版方法模式,相信你能通过这个实例能够快速掌握。
Android 设计模式 欢迎直接Commit更改,或者直接告诉我。 希望大家在开发 Android 应用程序时,能带来或得到一些与 Android 设计模式相关的东西。 MV* 获取更完整的 Android 应用程序。 MVP 架构介绍 View <-> ...
本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第 一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
模版方法模式是类的行为模式。提供一个抽象类,把一部分的逻辑以具体方法或构造子形式实现,然后声明一些抽象方法,迫使...另外,模版方法模式是基于继承机制代码复用的技术,它的结构和用法也是面向对象设计的核心。
本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
读核感悟 设计模式 用C来实现继承和模板 33 读核感悟 设计模式 文件系统和设备的继承和接口 34 读核感悟 设计模式 文件系统与抽象工厂 36 读核感悟 阅读源代码技巧 查找定义 37 读核感悟 阅读源代码技巧 变量命名...
Android平台的校园协会交流App设计与开发-包含源码-说明文档-演示视频.zip 摘 要 随着互联网技术的飞速发展和智能手机的广泛应用,APP作为基于Android平台开发的第三方应用,在智能手机的使用过程中扮演着越来越重要的...
Android 源码设计模式分析 地址 Android优秀学习资料整理 软件架构模式 参与步骤 > 注意事项中有详细说明,这里只是简要地介绍步骤 将该项目fork到自己的github; 在对应期数文件夹里(例如 issue-2,代表第二期 )...
这是一个Android MVP模型良好的架构设计,同时也做了Android和HTML 5交互架构,用到了RxJava+Retrofit+MVP+泛型缩减mvp+模板模式+命令模式+观察者模式+管理者模式 +简单工厂模式