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

來源:互聯網
上載者:User

  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等方法,都是在基類定義好了模板方法,而這些方法可以理解成衍生類別具體實現。當在適當條件下,基類根據自己的邏輯調用基類中的這些方法。

     我們在做軟體的過程中,要多以設計模式的眼光來研究問題,分析問題,對我們分析問題的能力會有一個比較大的提高。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.