模版方法模式在 android中使用

模版方法模式(Template Method):

模版方法模式是类的行为模式。提供一个抽象类,把一部分的逻辑以具体方法或构造子形式实现,然后声明一些抽象方法,迫使子类实现剩余的逻辑代码。不同的子类可以以不同的方式实现这些抽象方法,所以子类实现的剩余逻辑是不同的。另外,模版方法模式是基于继承机制代码复用的技术,它的结构和用法也是面向对象设计的核心。

模版方法模式的简略类图结构如下:

技术分享

模版方法模式涉及到的几个角色:

1、抽象模版角色

a、声明一个或多个抽象方法,供子类来具体实现,这些方法为“基本方法”,他们是一个顶级逻辑的组成步骤。

b、声明并实现一个模版方法,该方法一般是具体方法,给出了顶级逻辑的框架,具体的逻辑组成步骤推迟到子类实现。

2、具体模版角色

a、实现父类提供的一个或多个抽象方法。

b、每个抽象模版角色都有个具体模版角色对应,而每个具体模版角色都可给出这些对应抽象方法的不同实现。

 

好了,下面同样以一个实例进行说明模版方法模式的使用。例子是这样的:在android当中,我们经常使用继承机制来为所有的Activity类定义一个基类BaseActivity,这样可以把activity通用的逻辑封装在基类中,实现代码复用的能力,所以我们可以采用模版方法模式来实现,具体的结构类图如下所示。

 技术分享

下面为模版方法模式的核心代码部分:

抽象模版角色:

/**

 * @description :

 * 抽象模版角色所有子类的父类

 */

public abstract class BaseActivity extends Activity {

 

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      // 基本配置

      requestWindowFeature(Window.FEATURE_NO_TITLE);

      getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

      // ...

      setContentView(R.layout.activity_base);

     

      // 初始化页面执行

      initView();

   }

  

   /**

    * @description :

    * 生命周期方法-初始化页面执行

    */

   protected abstract void initView();

  

   /**

    * @description :

    * 生命周期方法-重新进入页面执行

    */

   protected abstract void resume();

  

   /**

    * @description :

    * 生命周期方法-隐藏到桌面或被挂起执行

    */

   protected abstract void pause();

 

   /**

    * @description :

    * 生命周期方法-离开当前页面执行

    */

   protected abstract void destroy();

 

   @Override

   protected void onDestroy() {

      super.onDestroy();

      destroy();

   }

 

   @Override

   protected void onPause() {

      super.onPause();

      pause();

   }

 

   @Override

   protected void onResume() {

      super.onResume();

      resume();

   }

  

}

 

具体模版方法角色:

/**

 * @description :

 * 具体模版角色-具体实现抽象方法

 */

public class LoadingActivity extends BaseActivity {

  

   @Override

   protected void initView() {

      setContentView(R.layout.activity_loading);

      // TODO

      log("初始化页面执行");

   }

 

   @Override

   protected void resume() {

      log("恢复页面执行");

   }

 

   @Override

   protected void pause() {

      log("暂停页面执行");

   }

 

   @Override

   protected void destroy() {

      log("页面销毁执行");

   }

  

   private void log(String msg) {

      Log.d("Patterns", msg);

   }

}

 

下面为模版方法模式实例运行的结果:

 技术分享

 

 

 

好了,到这里访问者模式已经介绍完了,希望对你有帮助,另外,原创作品来之不易,转载请注明谢谢。

 

点击我下载代码!

 

技术交流群:179914858

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。