设计模式之Activity基类封装
- 概述
- 为什么要使用设计模式
- 模板设计模式的介绍
- Activity的与模板设计模式之间的关系
- 总结
概述
说到设计模式,反正只要做过开发的就能说出一大堆设计模式,像最常用的单例设计模式、工厂设计模式、MVC设计模式等等。但是我们每个人知道这么多设计模式,那么运用的实际开发中的又有多少呢,所以用实践检验真理才是硬道理。
为什么要使用设计模式
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。方便快捷开发。
- 重用
- 易读
- 可靠
- 开发快
模板设计模式的介绍
今天我们要说的就是模板设计模式,也是在Android基类中大家常用的一种设计模式。
简单介绍:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
场景:
1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。
2、比如说有些工厂使用的模具,模型一样,只是有些细节上的差别个人理解:某些特定的场合流程是一致的,但是某些细节的东西不太确定。那么这种情况下可以考虑使用模板设计模式
Activity的与模板设计模式之间的关系
我们通常写一个Activity都会经历以下步骤
1、创建布局
2、初始化控件
3、初始化数据
4、其他等等
每一个Activity都是这样创建的,甚至每个方法都是一样的,只是布局和细节,所以用模板设计模式再好不过了。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1、初始化布局
setContentView(R.layout.activity_main);
//2、初始化控件
initView();
//3、初始化数据
initData();
//4、其他(如点击事件等等)
}
private void initData() {
}
private void initView() {
}
}
所以我们就需要创建一个模板BaseActivity
package commonutils.jsonnan.com.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
/**
* @author wangnan
* @time 2017/5/9 16:06
* @des
*/
public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//0、初始化基类数据
initBaseData();
//1、初始化布局
setContentView(getRootView());
//2、初始化控件
initView();
//3、初始化数据
initData();
//4、初始化点击事件
initListener();
}
/**初始化基类数据*/
private void initBaseData(){};
/**初始化布局*/
protected abstract int getRootView();
/**初始化控件*/
protected abstract void initView();
/**初始化数据*/
protected abstract void initData();
/**初始化点击事件*/
protected abstract void initListener();
@Override
public void onClick(View view) {
}
/**
* 可以写一写常用的方法,但是为了内存管理有些最好还是使用工具类
* 因为如果写到基类里面,他是初始化到内存里面的,也就是说没有使用,就已经占用空间
*/
protected void startActivity(Class<? extends Activity> clazz){
Intent in = new Intent(this,clazz);
startActivity(in);
}
}
说明:
1、此时需要使用到抽象的概念
2、有些不需要子类重写的方法使用private声明,如initBaseActivity()方法
3、使用的时候直接继承BaseActivity即可
4、不需要重写的方法,不需要申明抽象
5、也可以把这些通用的方法写到接口里面,从而BaseActivity实现接口中的方法
package commonutils.jsonnan.com.myapplication;
/**
* @author wangnan
* @time 2017/5/9 16:26
* @des
*/
public interface ActivityInterface {
//1、初始化布局
int getRootView();
//2、初始化控件
void initView();
//3、初始化数据
void initData();
//4、初始化点击事件
void initListener();
}
总结
设计模式重在思想与实践,实践检验真理
模板设计模式:某些特定的场合流程是一致的,但是某些细节的东西不太确定。