Android设计模式之模版方法模式
2016-12-21 14:31
459 查看
模版模式概念
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模版方法的运用
首先我们看下下面这段代码: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
相关文章推荐
- .NET设计模式-模版方法(Template Method)
- 设计模式--模版方法
- android设计模式---SDK源码之工厂方法模式
- 23种设计模式(6):模版方法模式
- Android设计模式系列(4)--SDK源码之模板方法模式
- .NET设计模式(16):模版方法(Template Method)
- Android Ap 开发 设计模式第三篇:模板方法模式 推荐
- 二十五.行为型设计模式——Template Method Pattern(模版方法模式)
- Android设计模式系列(8)--SDK源码之工厂方法模式
- 浅学设计模式之模板<Template>方法模式及在android中的应用
- 设计模式--模版方法(TemplateMethod)
- 设计模式学习总结11 - 行为型6 - TemplateMethod模版方法模式
- 设计模式之模版方法模式
- .NET设计模式(16):模版方法(Template Method)
- 设计模式与泡mm的关系之template method模版方法模式及再思考
- 设计模式--模版方法(TemplateMethod)
- [OOAD]设计模式之模版方法(Template Method)模式
- 设计模式(三)之模版方法模式(Template method Pattern)
- 23种设计模式(6):模版方法模式
- Android设计模式系列(4)--SDK源码之模板方法模式