Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android Ap 開發 設計模式第三篇:模板方法模式

Android Ap 開發 設計模式第三篇:模板方法模式

編輯:Android開發實例

  Template Method Pattern

模板的含義

  所謂模板,有用過VS的朋友會比較熟悉,這個IDE將一些統一的代碼編寫方法制作成模板加載在IDE裡面,開發者可以根據自己制作的模板或者微軟提供的模板比如Asp.net 、Winform 、WPF開發等各種模板。而Android 建立項目初期生成的Project 也可以當作是一個模板。它是將原先定義好的東西事先寫好了一套規范,具體要如何使用這套規范模板來完成不同的任務,是要看我們的AP開發者不同的實現方法。

  作為模板的方法要定義在父類,而方法的定義中使用到抽象方法。因此如果只看父類部分的程序,根本不知道到底會是怎樣處理內容,最多只能了解該如何調用處理抽象方法而已。

  實際實現抽象方法的是子類。要在子類實現方法,才能決定具體的操作。理論上,如果在不同的子類執行不同的實現,應該就能發展出不同的處理內容 。不過無論在哪個子類執行任何一種實現,處理的大致流程都是還要依照父類的制定方式。

 

程序示例

  此例子定義了三個類一個為抽象類(AbstractDisplay),另外兩個為分別實現這個抽象類其中的三個抽象方法,具體的程序示例圖見如下:

程序示意圖

AbstractDisplay 抽象類

 

public abstract class AbstractDisplay {
    public abstract String open();

    public abstract String print();

    public abstract String close();

    public final String display() {
        StringBuffer sb = new StringBuffer();
        sb.append(open());
        for (int i = 0; i < 5; i++) {
            sb.append(print());
        }
        sb.append(close());
        return sb.toString();
    }
}

 

  該類只實現了方法display 方法,並抽象出open(),print(),close()  這三個方法交子類代為實現。

 CharDisplay 類

 

public class CharDisplay extends AbstractDisplay {

    private char ch;

    public CharDisplay(char ch) {
        this.ch = ch;
    }

    @Override
    public String close() {
        // TODO Auto-generated method stub
        return ">>";
    }

    @Override
    public String open() {
        // TODO Auto-generated method stub
        return "<<";
    }

    @Override
    public String print() {
        // TODO Auto-generated method stub

        return String.valueOf(ch);
    }

}

 

StringDisplay 類

 

public class StringDisplay extends AbstractDisplay {

    public String string;
    private int width;

    public StringDisplay(String string) {
        this.string = string;
        this.width=string.length() ;
    }

    @Override
    public String close() {
        // TODO Auto-generated method stub
        return printLine();
    }

    @Override
    public String open() {
        // TODO Auto-generated method stub
        return printLine();
    }

    @Override
    public String print() {
        // TODO Auto-generated method stub
        return "|" + string + "|\n";
    }

    private String printLine() {
        StringBuffer sb = new StringBuffer();
         

        for (int i = 0; i < width; i++) {
            sb.append("*");
        }
         
        return sb.toString()+"\n";
    }

}

 

 

界面處理代碼:

 

public class TemplatePatternActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final AbstractDisplay d1=new CharDisplay('H');
        
        final AbstractDisplay d2=new StringDisplay("android pattern");
        
        
        
        Button result=(Button)findViewById(R.id.btn_result);
        
        final EditText et_result=(EditText)findViewById(R.id.result);
        
        result.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                et_result.setText(d1.display()+"\n"+d2.display());
                
                
            }
        });
    }
}

 

 效果如下:

 

      在模板方法模式當中,父類跟子類之間的聯系互相緊密。因此如果要在子類實現一個己經在父類聲明過的抽象方法時,必須先了解應該在哪個時間點調用這個抽象方法。要是沒有父類的程序源代碼,恐怕子類實現會是一個高難度的挑戰。

 

 

額外擴展

      有朋友建議我把類圖的UML畫出來,其實很早就有想過要這樣做,但懶得重新安裝一個軟件包,之後在網上找到了ArgoEclipse 用了一下覺得不錯,也在本篇文章中將UML圖畫了出來。

       將插件集成在Eclipse IDE中很簡單,只需要在利用eclipse 的下載器到這個位置 :http://argoeclipse.tigris.org/update_site  把補丁安裝集成即可。

 

 

源碼下載:

 模板方法模式

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved