• 设计模式--模版设计模式


    模版设计模式的概念或者定义:

    定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。
     
    以前虽然经常在项目中使用模版设计模式,特别在BaseActivity,BaseFragement,BaseFragementActivity,BaseAdapter这种基类定义一些延伸到子类中实现的方法,但是不知道这个就是模版设计模式,我就毙了狗了。
     
    比如在Base类里面为了规范代码的风格,在oncreate()里面调用空的函数,比如initView(),比如onCLickListener(),比如,初始化title的initTitleBar(),然后通过抽象方法供子类去实现这些模块,这样在项目编码过程中能够将每个人的代码规范到指定的位置,方便查看和调试代码。还有就是对于一些显示和判断的逻辑封装,以及都自定义的toast,对话框的统一,都可以通过在Base类中通过模版设计模式来实现,在子类中只是改变显示的内容,和逻辑以及业务的调整。
     
    模版设计模式对编码的好处:
    规范代码的流程,统一代码风格。
    可扩展。
    将子类的公共业务进行提取,减少冗余代码的编写,实现代码的复用。
     
    以BaseActivity举例子来说:
    getView(int id)
    isNull(String str)
    isStr(String str)
    gotoActivity(Class<?> cls)
    toast(String message)
    都是将本来在子类中冗余的代码统一封装到base类进行调用,简化代码编写,减少冗余。
      2 import android.app.Activity;
      3 import android.content.Intent;
      4 import android.content.res.Resources;
      5 import android.os.Bundle;
      6 import android.text.TextUtils;
      7 import android.view.KeyEvent;
      8 import android.view.View;
      9 import android.view.Window;
     10 import android.view.WindowManager;
     11 import android.widget.EditText;
     12 import android.widget.Toast;
     13 import com.yougou.android.util.Logger;
     14 /**
     15  * @类名: BaseActivity
     16  * @描述: TODO(Activity基类,所有的Activity都要继承自该Activity)
     17  */
     18 public class BaseActivity extends Activity {
     19     Resources res; // 通用资源缩写
     20     // 为0 短时间
     21     // 为1 长时间
     22     public static final int LENGTH_TIME = 0;
     23     @Override
     24     protected void onCreate(Bundle savedInstanceState) {
     25         requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示标题
     26         super.onCreate(savedInstanceState);
     27         res = getResources(); // 通用资源缩写
     28         // 优化输入法模式
     29         int inputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
     30         getWindow().setSoftInputMode(inputMode);
     31     }
     32     /**
     33      * 通过泛型来简化findViewById
     34      * 
     35      * @param id
     36      * @param <E>
     37      * @return
     38      */
     39     @SuppressWarnings("unchecked")
     40     protected final <E extends View> E getView(int id) {
     41         try {
     42             return (E) findViewById(id);
     43         } catch (ClassCastException ex) {
     44             Logger.i("Could not cast View to concrete class.");
     45             throw ex;
     46         }
     47     }
     48     /**
     49      * 检查字符串是否是空对象或空字符串
     50      * 
     51      * @param str
     52      * @return 为空返回true,不为空返回false
     53      */
     54     public boolean isNull(String str) {
     55         if (TextUtils.isEmpty(str)) {
     56             return true;
     57         } else {
     58             return false;
     59         }
     60     }
     61     /**
     62      * 检查字符串是否是字符串
     63      * 
     64      * @param str
     65      * @return 为空返回true,不为空返回false
     66      */
     67     public boolean isStr(String str) {
     68         return !isNull(str);
     69     }
     70     /**
     71      * 从当前activity跳转到目标activity,<br>
     72      * 如果目标activity曾经打开过,就重新展现,<br>
     73      * 如果从来没打开过,就新建一个打开
     74      * 
     75      * @param cls
     76      */
     77     public void gotoExistActivity(Class<?> cls) {
     78         Intent intent;
     79         intent = new Intent(this.getApplicationContext(), cls);
     80         intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
     81         startActivity(intent);
     82     }
     83     /**
     84      * 新建一个activity打开
     85      * 
     86      * @param cls
     87      */
     88     public void gotoActivity(Class<?> cls) {
     89         Intent intent;
     90         intent = new Intent(this.getApplicationContext(), cls);
     91         startActivity(intent);
     92     }
     93     /**
     94      * @Title: toast
     95      * @Description: TODO(土司操作)
     96      * @param @param context
     97      * @param @param message 要显示的内容
     98      * @return void 返回类型
     99      * @throws
    100      */
    101     public void toast(String message) {
    102         Toast.makeText(this.getApplicationContext(), message, LENGTH_TIME)
    103         .show();
    104     }
    105     /**
    106      * @Title: toast
    107      * @Description: TODO(土司操作)
    108      * @param @param context
    109      * @param @param message 设定文件
    110      * @return void 返回类型
    111      * @throws
    112      */
    113     public void toast(int message) {
    114         Toast.makeText(this.getApplicationContext(), message, LENGTH_TIME)
    115         .show();
    116     }
    117     /**
    118      * 从资源获取字符串
    119      * 
    120      * @param resId
    121      * @return
    122      */
    123     public String getStr(int resId) {
    124         return res.getString(resId);
    125     }
    126     /**
    127      * @方法名: getDemon
    128      * @描述: TODO(获取资源文件中的尺寸内容)
    129      * @设定: @param mRid
    130      * @设定: @return 设定文件
    131      * @返回: int 返回类型
    132      * @日期: 2014-6-30 下午2:14:11
    133      * @throws
    134      */
    135     protected int getDemon(int mRid) {
    136         return (int)res.getDimension(mRid);
    137     }
    138     /**
    139      * 从EditText 获取字符串
    140      * 
    141      * @param editText
    142      * @return
    143      */
    144     public String getStr(EditText editText) {
    145         return editText.getText().toString();
    146     }
    147     @Override
    148     public boolean onKeyDown(int keyCode, KeyEvent event) {
    149         switch (keyCode) {
    150         case KeyEvent.KEYCODE_BACK:
    151             this.finish();
    152         }
    153         return super.onKeyDown(keyCode, event);
    154     }
    155 }
     
     
  • 相关阅读:
    【2019】微软Power BI 每月功能更新系列——Power BI 10月版本功能完整解读
    教你写一个含信息的汇编程序
    为安卓手机刷上手机kali系统Nethunter
    多年珍藏的55w御剑字典
    netsh命令获取wifi历史连接密码
    win7/10获取本地wifi密码明文
    Wordpress综合检测和爆破工具
    那些年我们一起追逐过的安全工具
    大部分政府网站U-mail存在直接拿shell漏洞
    无需密码攻击 Microsoft SQL Server
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/4537116.html
Copyright © 2020-2023  润新知