1. 程式人生 > >android 快速開發(一)抽象類的使用:使業務邏輯更清晰

android 快速開發(一)抽象類的使用:使業務邏輯更清晰

抽象類的使用:使業務邏輯更清晰

一、abstract修飾符

        abstract修飾符可以用於類、方法、屬性、事件和索引指示器(indexer),表示其為抽象成員,抽象方法是沒有方法體的方法。
        abstract 不可以和static、virtual、final、native一起使用
        宣告為 abstract 成員可以不包括實現程式碼,但只要類中還有未實現的抽象成員(抽象方法),那麼這個類就是一個抽象類,抽象類的物件就不能被例項化,通常用於強制繼承類必須實現某一成員.抽象類是必須要派生子類的。並且,如果子類沒有實現抽象基類的所有方法,則子類也成為一個抽象類。

        java中定義抽象類是出於相同考慮。抽象類是他的所有子類的公共屬性的集合,所以抽象類的一大優點就是充分利用公共屬性來提高開發和維護程式的效率。

二、abstract例子

public abstract class MyAbstractClass { public void test1(){ // 一個正常的方法 } public abstract void test2(){ // 一個抽象方法。 } 提示,如果JAVA類的任何一個方法是abstract的,則類本身必須是abstract的。

三、在Android的用法

抽象類和抽象方法的使用可以使業務邏輯更清晰,自然而然的提高開發和維護程式的效率
安卓主要有activity,fragment所以常用的抽象類針對這兩個來做 下面寫一個在安卓中用到的抽象類
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public abstract class AbstractActivity extends FragmentActivity{
	
	/**
	 * 這裡新增所有公共的物件
	 * 單例
	 */
	protected SPUtil sp;
	
	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		init();
		addLisener();
		initSingleton();
		initData();
	}
	
	/**
	 * 所有初始化在此方法完成
	 */
	public abstract void init(); 
	
	/**
	 * 新增監聽事件
	 */
	public abstract void addLisener();
	
	/**
	 * 初始化資料
	 */
	public abstract void initData();

	/**
	 * 初始化所有單例物件
	 */
	private void initSingleton() {
		sp = SPUtil.getInstance();
	}
	
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
	}
	
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	
}

在上面的例子中,我們可以看到class前面加了一個abstract修飾符,因為類包含了三個帶有abstract修飾符的方法 分別是:init()  、  addLisener()  、  initData() 他們的作用在上面註釋  很清楚   還發現  7個生命週期都包括在裡面,目的是什麼呢: 每個類繼承這個抽象類,重寫抽象的方法,使安卓本身的程式碼與我們需要做的邏輯分離,並且在我們開發的過程中,都需要對某個特定生命週期做一些通用的操作 這樣可以省下許多程式碼量,如果還要在主動繼承的類中操作,只需要重寫這個方法就可以 下面我們來看下,主動繼承的類的編碼:
package com.yqy.yqy_abstract.activity;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

import com.yqy.yqy_abstract.R;
import com.yqy.yqy_abstract.utils.L;
import com.yqy.yqy_abstract.utils.TextUtils;


public class MainActivity extends AbstractActivity {

	private TextView tv_show;
	
	@Override
	public void init() {
		setContentView(R.layout.activity_main);
		tv_show = (TextView) findViewById(R.id.tv_show);
	}

	@Override
	public void addLisener() {
		tv_show.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				L.e("YQY", "tv_show>>onclick...");
				sp.write("tv_show", "點我了!");
			}
		});
	}

	@Override
	public void initData() {
		tv_show.setText(sp.read("tv_show", "沒點過我"));
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		if(TextUtils.isEmpty(sp.read("tv_show", ""))){
			sp.write("tv_show", "沒點過我...");
		};
	}


}


我們可以發現,看起來很有邏輯性,分工明確

我們可以根據我們的業務邏輯來寫不同的抽象類,基類等等,但是最終的父類也就像上面的寫法 接下來會寫一篇上面設計到的簡單的輔助類:SPUtil、  L、T 等。。。 第一次寫這類文章,希望大家指正,筆者也怕誤人子弟呀~~~~