Android Ap 开发 设计模式第三篇:模板方法模式

简介:

Template Method Pattern

模板的含义

  所谓模板,有用过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());
                
                
            }
        });
    }
}

 

 效果如下:

 

      在模板方法模式当中,父类跟子类之间的联系互相紧密。因此如果要在子类实现一个己经在父类声明过的抽象方法时,必须先了解应该在哪个时间点调用这个抽象方法。要是没有父类的程序源代码,恐怕子类实现会是一个高难度的挑战。

 

 

额外扩展

      有朋友建议我把类图的UML画出来,其实很早就有想过要这样做,但懒得重新安装一个软件包,之后在网上找到了ArgoEclipse 用了一下觉得不错,也在本篇文章中将UML图画了出来。

       将插件集成在Eclipse IDE中很简单,只需要在利用eclipse 的下载器到这个位置 :http://argoeclipse.tigris.org/update_site  把补丁安装集成即可。

 

 

源码下载:

 模板方法模式






 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/606786,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 缓存 Java
安卓应用开发中的内存优化策略
【5月更文挑战第14天】在移动应用的开发过程中,尤其是对于资源受限的安卓平台,内存管理与优化是提升性能和用户体验的关键。本文将探讨针对安卓应用开发的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、以及利用安卓系统的垃圾回收机制。通过这些方法,开发人员可以有效减少应用对系统资源的占用,从而延长电池寿命并提高应用的稳定性。
|
1天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
11 0
|
1天前
|
物联网 Java 开发工具
安卓应用开发:打造未来移动生活
【5月更文挑战第10天】 随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的一部分。作为智能手机市场的两大巨头,安卓和iOS分别占据了一定的市场份额。在这篇文章中,我们将重点关注安卓应用开发,探讨如何利用先进的技术和创新思维,为用户打造更加便捷、智能的移动生活。文章将涵盖安卓应用开发的基本概念、关键技术、以及未来发展趋势等方面的内容。
|
1天前
|
Shell 开发工具 Android开发
如何单独 build android ap (以launcher为例)
如何单独 build android ap (以launcher为例)
10 1
|
1天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
15 0
|
1天前
|
设计模式 算法 Java
设计模式在Java开发中的应用
设计模式在Java开发中的应用
18 0
|
1天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
17 1
|
1天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
15 0
|
1天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
1天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。

热门文章

最新文章