Android 设计模式第三篇:模板方法模式
来源:互联网 发布:js 迭代object 编辑:程序博客网 时间:2024/05/13 11:13
Template Method Pattern模板的含义
程序示例
StringDisplay 类
界面处理代码:
所谓模板,有用过VS的朋友会比较熟悉,这个IDE将一些统一的代码编写方法制作成模板加载在IDE里面,开发者可以根据自己制作的模板或者微软提供的模板比如Asp.net 、Winform 、WPF开发等各种模板。而Android 建立项目初期生成的Project 也可以当作是一个模板。它是将原先定义好的东西事先写好了一套规范,具体要如何使用这套规范模板来完成不同的任务,是要看我们的AP开发者不同的实现方法。
作为模板的方法要定义在父类,而方法的定义中使用到抽象方法。因此如果只看父类部分的程序,根本不知道到底会是怎样处理内容,最多只能了解该如何调用处理抽象方法而已。
实际实现抽象方法的是子类。要在子类实现方法,才能决定具体的操作。理论上,如果在不同的子类执行不同的实现,应该就能发展出不同的处理内容 。不过无论在哪个子类执行任何一种实现,处理的大致流程都是还要依照父类的制定方式。
程序示例
此例子定义了三个类一个为抽象类(AbstractDisplay),另外两个为分别实现这个抽象类其中的三个抽象方法,具体的程序示例图见如下:
AbstractDisplay 抽象类
public abstract class AbstractDisplay { public abstract String open(); public abstract String print(); public abstract String close(); public final String display() { StringBuffer sb = new StringBuffer(); sb.append(open()); for (int i = 0; i < 5; i++) { sb.append(print()); } sb.append(close()); return sb.toString(); } }
该类只实现了方法display 方法,并抽象出open(),print(),close() 这三个方法交子类代为实现。
CharDisplay 类public class CharDisplay extends AbstractDisplay { private char ch; public CharDisplay(char ch) { this.ch = ch; } @Override public String close() { // TODO Auto-generated method stub return ">>"; } @Override public String open() { // TODO Auto-generated method stub return "<<"; } @Override public String print() { // TODO Auto-generated method stub return String.valueOf(ch); } }
StringDisplay 类
public class StringDisplay extends AbstractDisplay { public String string; private int width; public StringDisplay(String string) { this.string = string; this.width=string.length() ; } @Override public String close() { // TODO Auto-generated method stub return printLine(); } @Override public String open() { // TODO Auto-generated method stub return printLine(); } @Override public String print() { // TODO Auto-generated method stub return "|" + string + "|\n"; } private String printLine() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < width; i++) { sb.append("*"); } return sb.toString()+"\n"; }}
界面处理代码:
public class TemplatePatternActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final AbstractDisplay d1=new CharDisplay('H'); final AbstractDisplay d2=new StringDisplay("android pattern"); Button result=(Button)findViewById(R.id.btn_result); final EditText et_result=(EditText)findViewById(R.id.result); result.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub et_result.setText(d1.display()+"\n"+d2.display()); } }); }}
本文转自: http://www.1000phone.net/thread-6789-1-1.html
- Android Ap 开发 设计模式第三篇:模板方法模式
- Android App 开发 设计模式第三篇:模板方法模式
- Android 设计模式第三篇:模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- android设计模式之模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- Android 设计模式之模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式系列--模板方法模式
- Android设计模式应用-模板方法模式
- Android设计模式-模板方法模式
- Android设计模式--模板方法模式
- Android设计模式之模板方法模式
- 分享的快乐
- 最大连续子序列的和
- 更改Android AVD模拟器创建路径位置的方法
- 利用未启用SafeSEH模块绕过SafeSEH
- 五九炮过河车对屏风马平炮兑车
- Android 设计模式第三篇:模板方法模式
- 安装 .NET 3.5
- hdu 3360 National Treasures 最小顶点覆盖(最大匹配)
- 最小功能shared_ptr
- 阿里校招内推简历筛选的阶段性小结(转)
- 谷得网诈骗 看了之后真的很震惊啊
- type="button" ,"submit" 的区别(转)
- 一日一码04——快速排序
- STL之adjacent_find