模板方法(Template method)模式在Android应用

Android系统是一个优秀的应用程序框架,在框架中设计模式有着广泛的应用。当然Android也不会例外,本文只是简单以View类为例来说明Template method模式在Android中的应用。

首先我们温习一下Template method模式。模板方法模式作用是:在基类中定义好算法和流程。具体的实现延迟到派生类中定义。其UML图如下:

从上图我们可以看出在AbstractClass中定义好了TemplateMethod方法,这个方法中定义好了对PrimitiveOperation方法的调用,但是在AbstractClass中把PrimitiveOperation方法定义成了抽象方法,没有实现,所以这个方法也只能是一个模板,不能调用。这样当定义ConcreteClass的时候,需要定义PrimitiveOperation方法,这样AbstractClass中的TemplateMethod方法中定义的逻辑就可以正确运行了。

我通过上面的描述我们可以知道,模板方法这个模式在框架中肯定会有很广泛的应用。这个模式可以对应成逻辑流程在框架中定义,具体实现有用户自己定义。

下面我以Android框架中的View类为例来介绍一下,这个模式在Android中的应用。

1、我们创建一个helloview工程。

2、增加一个MyView类,代码如下:

package com.simon.helloview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.view.View;public class MyView extends View {public MyView(Context context) {super(context);}protected void onDraw (Canvas canvas) {Paint paint = new Paint();paint.setARGB(255, 255, 0, 0);canvas.drawCircle(100, 100, 100, paint);}}

3、定义HelloViewActivity代码如下:

package com.simon.helloview;import android.app.Activity;import android.os.Bundle;public class HelloViewActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MyView(this));    }}

这个例子中,MyView实现了基类View的onDraw方法,该方法是protected,不能被用户调用的。那么谁会调用这个方法呢?如果你仔细研究一下View.java的代码,你就会发现在View的draw方法中调用了onDraw方法。逻辑如下:

public void draw(Canvas canvas) {    .......    onDraw(canvas);    .......}

由此可见基类View中已经定义好了模板方法,所以派生类中只需要定义onDraw方法在窗口上面画怎么画就可以了。用户调用view对象的模板方法draw方法来绘制窗口。

在Android模板方法有这个很广泛的应用,基本上随处可见。在比如Activity类的onCreate,onStart等方法,都是在基类定义好了模板方法,而这些方法可以理解成派生类具体实现。当在适当条件下,基类根据自己的逻辑调用基类中的这些方法。

我们在做软件的过程中,要多以设计模式的眼光来研究问题,分析问题,对我们分析问题的能力会有一个比较大的提高。

原文地址:http://my.unix-center.net/~Simon_fu/?p=664

更多相关文章

  1. Android开源:数据库ORM框架GreenDao学习(二)数据库查询篇
  2. Instant Run详解
  3. Android(安卓)Mini音乐播放器[简单版本]
  4. 你真的懂Handler吗?Handler问答
  5. Android创建jar包的步骤
  6. Android中的Service详解
  7. Android系列教程(1):Notification 与状态栏信息
  8. Android(安卓)framework层实现实现wifi无缝切换AP
  9. Android(安卓)SQLiteOpenHelper源码解读

随机推荐

  1. SAP企业移动平台开发探索系列6 – 使用SU
  2. Android学习札记44:解读APK反编译后得到的
  3. android studio 文件结构makefile
  4. HTML5能取代Android和iOS应用程序吗?
  5. 高德地图的调试版SHA1与发布版SHA1分别的
  6. Android在网络中与JavaWeb的项目进行交互
  7. Android应用程序整合第三方API(以高德Map
  8. Android第一次亲密接触
  9. Android关于C:/Documents and Settings/A
  10. 为什么Google并不担心Android的营收