`
yehoubin
  • 浏览: 24276 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android设计模式系列--模板方法模式

阅读更多

模板方法,和单例模式是我认为GOF的23中最简单的两种模式。
但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分,是面向对象的一种基本认识。
打比方说父亲有很多理想,就行医救人吧,但是父亲医术不行,只能靠儿子,儿子长大后遵从父亲大志,春风拂面,妙手回春,实现了父亲的理想,儿子做的事情早在出生前就定下来了,是父亲之前久定好的模板。
认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。
本文以View中的draw方法为例,展开分析。
模板方法,TemplateMethod,光是学习这个模式,就会对你产生长远影响的一个模式。

1.意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 
热门词汇:骨架 步骤 结构 延迟到子类 

2.结构 

定义了几个步骤1,2,3等,在模板方法中按照一定的结构顺序执行这些步骤。父类的方法可以有缺省实现,也可以是一个空实现,即所谓的钩子操作。
结合实际情况,我们画出View中draw方法涉及到的几个步骤方法如下:


学习模板方法对于我们了解框架的基类实现,生命周期和流程控制非常有帮助,我觉得是务必要掌握的一个模式。

3.代码

  1. public class View{  
  2.     /**  
  3.      * 钩子操作,空实现  
  4.      */ 
  5.     protected void onDraw(Canvas canvas) {  
  6.     }  
  7.    
  8.     /**  
  9.      *钩子操作,空实现  
  10.      */ 
  11.     protected void dispatchDraw(Canvas canvas) {  
  12.     }  
  13.    
  14.     //算法骨架  
  15.     public void draw(Canvas canvas) {  
  16.        if (!verticalEdges && !horizontalEdges) {  
  17.             // 步骤1  
  18.             if (!dirtyOpaque) onDraw(canvas);  
  19.    
  20.             // 步骤2  
  21.             dispatchDraw(canvas);  
  22.    
  23.             // 步骤3  
  24.             onDrawScrollBars(canvas);  
  25.    
  26.             return;  
  27.         }  
  28.     }  
  29.     //... ...  
  30. }  

 

我们看看系统组件TextView的实现:

 

  1. public class TextView{  
  2.     @Override 
  3.     protected void onDraw(Canvas canvas) {  
  4.         //大量自定义实现代码  
  5.     }  
  6. }  

如果我们自定义View的话,我们一般也是重写onDraw方法即可:

  1. public class MyView extends View {  
  2.    
  3.     public MyView(Context context) {  
  4.         super(context);  
  5.     }  
  6.    
  7.     @Override 
  8.     protected void onDraw(Canvas canvas) {  
  9.         super.onDraw(canvas);  
  10.     }  
  11.    
  12.     @Override 
  13.     protected void dispatchDraw(Canvas canvas) {  
  14.         super.dispatchDraw(canvas);  
  15.     }  
  16.        
  17. }  

4.效果
(1).模板方法是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。
(2).模板方法导致一种方向控制结构,"好莱坞法则":"Don't call me,i will call you.",即一个父类调用子类的操作,而不是相反。
(3).模板调用操作的类型有具体的操作,具体的AbstracClass操作,原语操作,工厂方法,钩子操作。少定义原语操作。
(4).android中对这些重定义操作的命名喜欢在方法前加一个前缀on。
(5).模板方法使用继承来改变算法的一部分。策略模式使用委托来改变整个算法。

 

出自:http://mobile.51cto.com/ahot-418992.htm

分享到:
评论

相关推荐

    Java和Android源码设计模式 2017-03-21

    ### Java和Android源码设计模式解析 #### 前言:设计模式的重要性 设计模式是软件工程中的一个重要概念,它代表了一种最佳实践,能够帮助开发者解决常见的编程问题。掌握设计模式不仅能够提升代码的质量,还能提高...

    android常用设计模式

    Android 设计模式系列还包括工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式、适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式、解释器模式、模板方法模式、职责链模式、命令...

    Android设计模式(详细讲解了10个Android设计模式)

    详细讲解了组合模式、观察者模式、单例模式、模板方法模式、备忘录模式、享元模式、命令模式、工厂方法模式、适配器模式 原型模式等10个Android设计模式,和CSDN上其他讲Android设计模式的文章完全不同。讲解详细,...

    Android编程设计模式之模板方法模式详解

    本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,...

    Android-23种设计模式

    设计模式是对软件设计中常见问题的解决方案的模板,经过时间和实践的检验,能够帮助开发者有效地解决复杂性问题,提高代码的重用性和可扩展性。本资料包涵盖了23种经典的设计模式,旨在帮助Android开发者深入理解和...

    android设计模式

    "android设计模式"这一主题,主要涵盖了一些常见的设计原则、模式以及如何在Android环境中应用它们。《设计模式之禅》作为一本经典著作,其深入浅出的讲解方式使得读者能够轻松掌握设计模式的核心理念。 1. **设计...

    Android设计模式

    "Android设计模式"这个主题涵盖了多种在Android系统源码以及应用程序开发中常用的设计模式。这些模式是解决常见编程问题的成熟方案,通过理解和应用它们,可以显著提高代码质量。 设计模式分为三大类:创建型模式、...

    Android-一个高级的Android模板项目

    【Android-一个高级的Android模板项目】 在Android开发领域,创建一个高级的模板项目是至关重要的,因为它可以作为后续开发的基础,提供最佳实践、优化的代码结构和可重用的组件。这个“Android-一个高级的Android...

    Android源码设计模式解析与实战 pdf 完整版

    总的来说,《Android源码设计模式解析与实战》是一本深入浅出的Android设计模式教程,对于希望提升Android开发技能的工程师来说,是一份不可多得的学习资料。通过对书中的知识点进行深入学习和实践,开发者将能更好...

    Java和Android源码设计模式

    ### Java和Android源码设计模式 #### 前言:迈向精通之路——设计模式的重要性 在软件开发领域,设计模式被视为提升代码质量和可维护性的关键工具。本文将深入探讨Java和Android开发中常用的设计模式,并结合实际...

    Android UI模板设计---TopBar(标题栏)

    在Android应用开发中,UI...总的来说,Android UI模板设计中的TopBar是一个关键元素,通过自定义它可以实现丰富的功能和独特的视觉效果。理解并掌握自定义TopBar的实现方法,对于提升Android应用的UI设计能力至关重要。

    自定义控件 - 设计模式 - 良好设计 - ViewPager

    设计模式是软件工程中的一种最佳实践,它们是解决常见问题的模板,可以提高代码的可读性和可维护性。在自定义控件中,设计模式的应用至关重要。例如: 1. **组合模式**:组合模式允许我们将多个小的组件组合成一个...

    设计模式之模版方法模式

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在创建算法族时。这种模式允许我们在抽象类中定义一个算法的框架,而将具体步骤延迟到子类中实现,从而实现了代码复用和扩展。下面...

    《Android源码设计模式解析与实战》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一本关于Android源码设计模式的书籍,并提供了PDF版本的下载链接。下面将围绕这本书籍所涉及的核心知识点进行详细的解析与介绍。 ### 设计模式简介 设计模式是在软件工程...

    Android-用Kotlin实现设计模式代码

    本主题将探讨如何利用Kotlin实现常见的设计模式,这些模式对于构建可维护、可扩展和灵活的Android应用程序至关重要。 1. **单例模式(Singleton)**:在Android中,单例模式常用于创建全局唯一实例,例如网络请求管理...

    android 24种设计模式介绍与6大设计原则

    在Android开发中,设计模式和设计原则是提升代码质量、可维护性和可扩展性的重要工具。以下是关于"Android 24种设计模式介绍与6大设计原则"的详细阐述: 一、六大设计原则 1. **单一职责原则(Single ...

    Android源码设计模式解析与实战

    本书涵盖了多种经典的设计模式,如单例模式、工厂模式、观察者模式、适配器模式、装饰器模式、代理模式、建造者模式、策略模式、模板方法模式等。 1. **单例模式**:在Android中,单例模式常用于管理全局唯一的对象...

    Android源码设计模式解析与实战.pdf

    本书不仅详细分析了Android系统内部使用的各种设计模式,还通过实战案例帮助读者深入理解这些模式的应用场景及其实现方法。 ### 一、设计模式简介 设计模式是一种在特定情况下解决软件设计问题的经验总结,它提供...

Global site tag (gtag.js) - Google Analytics