模版模式概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模版方法的运用
首先我们看下下面这段代码:
package com.cc.testdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById();
addListener();
}
//控件初始化
private void findViewById() {
btn = (Button) findViewById(R.id.btn);
}
//设置监听器
private void addListener() {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "onclick", Toast.LENGTH_SHORT).show();
}
});
}
}
activity_main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="click"/>
</LinearLayout>
代码很浅显易懂,就是创建一个activity在onCreate方法里面执行了 findViewById()控件初始化方法,addListener()设置监听器方法,布局文件只有一个Button,点击按钮后Toast显示提示。现在功能改变了需要跳转另一个activity,实现起来很容易只需在onclick里面处理逻辑就可以.
MainActivity里面代码:
//设置监听器
private void addListener() {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}
});
}
首先再新建一个Main2Activity内容和MainActivity一样,布局也直接复制粘贴就可以,然后修改MainActivity里面onClick方法加上跳转就可以 startActivity(new Intent(MainActivity.this, Main2Activity.class));跳转到Main2Activity,这样功能就实现了。可是想过问题没,两个activity里面代码基本相同,如果后期项目越来越大,那相同的代码岂不是要占很多篇幅,当然很不合理,所以就运用到了模版方法模式。
package com.cc.testdemo;
import android.app.Activity;
import android.os.Bundle;
import android.os.PersistableBundle;
/**
* Created by CC on 2016/12/21.
*/
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//模版方法
init();
}
private void init() {
setContentView();
findViewById();
addListener();
}
//加载布局
protected abstract void setContentView();
//控件初始化
protected abstract void findViewById();
//设置监听器
protected abstract void addListener();
}
模版方法的创建步骤
新建一个普通的类加上关键字abstract使其为一个抽象类
继承Activity
在onCreate()方法里面新建一个方法即为模版方法
模版方法里面添加需要的业务逻辑 setContentView(); findViewById(); addListener();
创建这些抽象方法
//加载布局
protected abstract void setContentView();
//控件初始化
protected abstract void findViewById();
//设置监听器
protected abstract void addListener();
使用
使得其余的类继承该BaseActivity,由于是抽象类所以需要实现其抽象方法
package com.cc.testdemo;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
public class MainActivity extends BaseActivity {
private Button btn;
@Override
protected void setContentView() {
setContentView(R.layout.activity_main);
}
@Override
protected void findViewById() {
btn = (Button) findViewById(R.id.btn);
}
@Override
protected void addListener() {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}
});
}
}
每个类可以有自己方法处理方式只需要写在对应的方法体就可以了。希望对大家有所帮助,有何不同的见解可以留言,我会时刻关注。
转载请说明出处:http://blog.csdn.net/qq_33792946/article/details/53784177