1. 定義
定義一個操作中的算法的框架,而將一些步驟延遲到子類。使得子類可以不改變一個算法的結構即可重新定義該算法的某些特定步驟。
其實就是系統、或者其他人已經把所有東西都寫好,把架子都搭好,里邊有的東西你自己可以根據自己的業務需求去實現就行,效果分析圖如下:
2. 基本框架
角色的介紹:
AbstractClass:抽象類,定義了一套算法框架;
ConcreteClass:具體的實現類,可以自定義一些算法;
3. BaseActiivty的構建
/**
* Email: 2185134304@qq.com
* Created by JackChen 2018/3/31 21:43
* Version 1.0
* Params:
* Description: 整個應用的 BaseActivity
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 設置布局 layout
setContentView();
// 一些特定的算法,子類基本都會使用的
ViewUtils.inject(this);
// 設置標題
initTitle() ;
// 初始化界面
initView() ;
// 初始化數據
initData() ;
}
// 設置布局 layout
protected abstract void setContentView();
// 設置標題
protected abstract void initTitle();
// 初始化界面
protected abstract void initView();
// 初始化數據
protected abstract void initData();
/**
* 啟動Activity
*/
protected void startActivity(Class<?> clazz){
Intent intent = new Intent(this , clazz) ;
startActivity(intent);
}
}
BaseSkinActivity代碼如下:
/**
* Email: 2185134304@qq.com
* Created by JackChen 2018/4/1 8:52
* Version 1.0
* Params:
* Description: 不要直接繼承BaseActivity,永遠都要給中間留一層BaseSkinActivity
*/
public abstract class BaseSkinActivity extends BaseActivity {
// 這里預留出地方 防止后期會有什么新的功能添加
}
SecondActivity直接繼承BaseSkinActivity,而不是繼承BaseActivity
/**
* Email: 2185134304@qq.com
* Created by JackChen 2018/3/31 21:57
* Version 1.0
* Params:
* Description:
*/
public class SecondActivity extends BaseSkinActivity{
@ViewById(R.id.test_tv)
TextView test_tv ;
@ViewById(R.id.test_iv)
ImageView test_iv ;
/**
* 設置布局文件
*/
@Override
protected void setContentView() {
setContentView(R.layout.activity_second);
}
/**
* 初始化頭部
*/
@Override
protected void initTitle() {
}
/**
* findViewById
*/
@Override
protected void initView() {
startActivity(SecondActivity.class);
}
/**
* 請求網絡的數據
*/
@Override
protected void initData() {
}
}
只可以把一些通用的代碼封裝到 BaseActivity,如果用的不是特別多的,就不要放到里邊
注意:
1>:BaseActivity中只能放一些通用的方法,基本是每個Activity都需要使用的方法,比如讀數據readDataBase最好不要放進來;
2>:如果是兩個或者兩個以上的地方要使用,最好寫一個工具類;
3>:因為每個子類Activity都會繼承BaseActivity,所以只要一繼承BaseActivity,那么這個子類就會加載進內存,那么該子類中的方法也就會加載進內存,其實內存在davilk層就是一塊內存地址,也就是時候如果你在BaseActivity中寫了很多的方法,而且有的方法又不太常用,所以就會占用很多的內存地址,那么肯定是會影響性能的;
4>:為了防止后期會有一些新的功能添加,所以永遠都要預留一層BaseSkinActivity,不要直接去繼承BaseActivity,而是要讓自己的類去繼承BaseSkinActivity;
4. 常見使用模板設計模式的有:
AsyncTask、View的繪制流程(View中的draw()方法)、BaseActivity、Activity的生命周期
5. 設計模式開源的網站:
https://github.com/simple-android-framework-exchange/android_design_patterns_analysis#schedule