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

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

定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。

以前虽然经常在项目中使用模版设计模式,特别在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类进行调用,简化代码编写,减少冗余。

  1 package com.yougou.android.ui;
  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 }
时间: 2024-10-12 05:03:49

设计模式--模版设计模式的相关文章

设计模式 模版方法模式 展现程序员的一天

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 继续设计模式~ 模版方法模式 老套路,先看下定义:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤. 简单看下定义,模版方法定义了一个算法的步骤,并且允许子类为一个或多个步骤提供实现.定义还算清晰,下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座).简单描述一下:本公司有程序猿.测试

java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单一职责原则 其实就是开发人员经常说的"高内聚,低耦合" 也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 开闭原则 核

设计模式 -- 模版方法模式

模板方法模式:定义一个算法的执行骨架,将具体的算法实现延迟到子类完成. 模板方法模式需要开发抽象类和具体子类的设计师之间的协作.一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤.代表这些具体逻辑步骤的方法称做基本方法(primitive method):而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来. 举个例子: 在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单.吃

我的设计模式:从模版设计模式谈到建造者模式

1.模版设计模式  TemplateMethod Pattern 问题:创建模型,如何处理更好?有共性有异性,共性放在哪里(abstract)?异性放在哪里(实现)? 缺陷:暴露方法好吗?protected保护起来    方法不会被子类继承修改final更好 概念:模版中的方法(抽象方法.具体方法.钩子方法) 模版模式:重写父类的方法,再调用父类的方法产生不同的结果 具体方法一般体现在调用其他方法的顺序上 模版模式一定是继承来的 2.建造者模式  Builder Pattern 问题升级:继续添

Android 模版设计模式实战

概念 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 模版设计模式的本质便是固定算法框架. 上面的概念中有三个要点: 父类定义方法模版 子类实现方法的某一个部分 调用以父类的方式调用 优点 在开发时,只需要考虑方法的实现.不需要考虑方法在何种情况下被调用.实现代码复用. 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现. 各子类中公共的行

[设计模式] .NET设计模式笔记 - 有多少种设计模式

.NET下的23中设计模式. ※创建型模式篇 ●单件模式(Single Pattern) ●抽象工厂模式(Abstract Factory) ●建造者模式(Builder Pattern) ●工厂方法(Factory Method) ●原型模式(Protype Pattern) ※结构型模式篇 ●适配器模式(Adapter Pattern) ●桥接模式(Bridge Pattern) ●装饰模式(Decorator Pattern) ●组合模式(Composite Pattern) ●外观模式(

Java软件设计模式------装饰设计模式

Java软件设计模式一共分为23种; 一般常用的有: 单例设计模式 装饰设计模式 工厂设计模式 装饰设计模式 定义:英文叫Decorator Pattern,又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 在生活中我们用程序员和项目经理的例子来比喻,项目经理是从程序员开始的,经过不断地积累工作经验.不断的学习新的知识,才有可能升职. 在装饰设计模式中项目经理就是程序员的增强. 程序猿: 写程序 项目

[设计模式] .NET设计模式笔记 - 了解设计模式

今天在TerryLee的cnblog(http://terrylee.cnblogs.com)里看到了与设计模式相关的整套文章,初学设计模式看完每篇文章后做些笔记和摘抄. ●什么是设计模式,什么是架构? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的

JAVA设计模式-装饰设计模式-继承体系的由来和装饰类的优化

首先看一下我们设计类的过程: 专门用于读取数据的类 MyReader l--MyTextReader:根据不同的功能会不断延伸很多子类 l--MyMeidaReader l--MyDataReader l--.......... 为了提高以上子类的工作效率,需要加入缓冲区技术.所以又会出现下面的类的继承体系. (体系1) MyReader l--MyTextReader:根据不同的功能会不断延伸很多子类 l--MyBufferedTextReader l--MyMeidaReader l--My