`
univasity
  • 浏览: 811586 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[资料]MIDP设计模式之集结贴[JavaME]

    博客分类:
  • J2me
阅读更多

 

1:

架构性宣言: MIDP 2.0 中的工厂设计模式

如何使用 MIDP Generic Connection Framework

http://www-128.ibm.com/developerworks/cn/java/wi-arch22/

 

级别: 初级

Mikko Kontio , 产品经理, Softera

2006 年 3 月 13 日

这个月将学习有关 MIDP 2.0 的更多知识,同 Mikko 一起观察 Mobile Information Device Profile (MIDP) 的通用连接器框架 —— 工厂设计模式。

手机开发人员通常使用 Generic Connection Framework 在 Mobile Information Device Profile (MIDP) 中创建和维护顺利的连接。好的架构师都知道该框架背后真正的动力是不可缺少的工厂设计模式。工厂设计模式是面向对象编程所必需的,它构成了应用程序开发人员使用的大多数强大框架的基础 —— 包括 MIDP。在本月的架构性声明 专栏中,我将介绍工厂模式的三种变体,然后展示如何在 MIDP 2.0 通用连接框架中工厂支持连接处理。

工厂模式

工厂设计模式是面向对象编程中最常用的设计模式之一。它又被称为创建性模式 ,因为它被用来创建其他类。在应用程序预见不到自己要创建的对象类型时,就会使用工厂解决方案。在这些情况下,可以使用工厂模式作为创建对象的基础,不需要确切地了解将要创建哪些对象。

工厂 实际上是一组模式的名称,这组模式的目的是创建类。每个变体都指定一个不同的创建方法。这些模式变体是:

  • 静态工厂(Static Factory)
  • 工厂方法(Factory Method)
  • 抽象工厂(Abstract Factory)

首先,我先一般性地查看一下工厂模式解决常见应用程序设计问题的方式。然后将演示工厂模式如何开始对 MIDP 2.0 中大量连接类型的连接进行处理。

 

其余部分请到IBM站点上看吧。

 

2:

《MVC设计模式在客户端的应用》英文文档下载地址:
http://www.j2medev.com/Soft/ShowSoftDown.asp?UrlID=1&SoftID=346

3:

《应用MVC模式解决J2ME导航问题》
http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=28

摘要:开发MIDlet的程序员也许经常会被界面的导航问题所困扰,尤其界面比较多的时候,通常有七、八个界面就会很让人头疼了。本文讲述如何应用MVC设计模式解决这类的问题。

    MVC 设计模式已经非常的成熟并在WEB Application的开发中广泛使用,apache的开源项目struts就是典型的例子。MVC的本质就是是逻辑和显示分开,通过控制器进行协调。通常我们会感到控制器比较的肥大,这个是个有争议的问题。MIDP的用户界面开发是比较简单的,只有那么20几个类。但是由于导航一般只能通过 Command来实现,所以界面增多的情况下,如果没有有效的组织那么程序写起来非常的乱,最致命的是这样的程序可读性差、扩展性差、可维护性差。

    应用MVC解决这个问题的关键是提供一个桥梁作用的控制器,它通常要有一个MIDlet作为参数。

 

4:

层叠式菜单模式的流程流转示例:


Figure 1. A city guide application using Cascading Menu

code:

  public void commandAction(Command command, Displayable displayable)
  {
    if ( command.equals( List.SELECT_COMMAND ) && displayable instanceof MenuList )
    {
      MenuList list = (MenuList) displayable;
      int i = list.getSelectedIndex();
      MenuElement item = (MenuElement) children.elementAt( i );
      Object next = menuMap.get( item );

      if ( next instanceof MenuElement )
      {
        list.showMenu( (MenuElement) next );

      } else if ( next instanceof MDisplayable && next instanceof Displayable )
      {
        ((MDisplayable)next).onDisplay( item );
        list.getDisplay().setCurrent( (Displayable) next );

      } else if ( next instanceof Displayable )
      {
        list.getDisplay().setCurrent( (Displayable) next );
      }
    }
  }

更多代码参见

http://www.cnblogs.com/Files/zhengyun_ustc/PatternShow.rar

中的PatternShow\src\pattern\menu。

 

5:

向导式对话框模式  幻灯片模式 流程流转参见:

流程流转图样看:


Figure 3. A sample wizard application

/**
   * this commandAction is only invoked by WDialog
   * This function control the flow of dialogs when user press Next or Back
   * button. This function also invoke onEnter() and onLeave() on WDialog. If a dialog
   * return WDialog.REJECT on either onEnter() or onLeave(), WizardEngine will not
   * switch screen.
   * @param command
   * @param displayable
   */
  public void commandAction(Command command, Displayable displayable)
  {
    WDialog cur_dialog = (WDialog)displayable;

    if ( command == WDialog.NEXT_COMMAND )
    {
      int i1 = dialogs.indexOf( displayable );
      if ( i1 < dialogs.size() - 1 )
      {
        WDialog next_dialog = (WDialog)dialogs.elementAt( i1 + 1 );
        if ( cur_dialog.onLeave( WDialog.FORWARD ) != WDialog.OK )
           return;
        if ( next_dialog.onEnter( WDialog.FORWARD ) != WDialog.OK )
           return;
        display.setCurrent( next_dialog );
      }

    } else if ( command == WDialog.BACK_COMMAND )
    {
      int i1 = dialogs.indexOf( displayable );
      if ( i1 > 0 )
      {
        WDialog prev_dialog = (WDialog)dialogs.elementAt( i1 - 1 );
        if ( cur_dialog.onLeave( WDialog.BACKWARD ) != WDialog.OK )
           return;
        if ( prev_dialog.onEnter( WDialog.BACKWARD ) != WDialog.OK )
           return;

        display.setCurrent( prev_dialog );
      }
    }
  }

更多代码参见

http://www.cnblogs.com/Files/zhengyun_ustc/PatternShow.rar

中的PatternShow\src\pattern\wizard。

 

6:

 


Figure 6. Example slide show sequence

Listing 6. Slide show implementation

    // Create a slide show engine with Display object as parameter.
    // 'this' pointer refers to current MIDlet.
    engine = new SlideEngine( Display.getDisplay(this ) );

    // Create 3 slides. All the slides are formed here.
    // You can use something else.
    Form f1 = new Form( "Slide 1");
    f1.append( "This is slide number 1" );

    Form f2 = new Form( "Slide 2");
    f2.append( "This is slide number 2" );

    Form f3 = new Form( "Slide 3");
    f3.append( "This is slide number 3" );

    // Add the slides to engine, each slide stays on screen
    // for 2 seconds.
    engine.addSlide( f1, 2000 );
    engine.addSlide( f2, 2000 );
    engine.addSlide( f3, 2000 );

    // Start the slide show
    engine.startShow();

更多代码参见

http://www.cnblogs.com/Files/zhengyun_ustc/PatternShow.rar

中的PatternShow\src\pattern\slide。

 

7:

分页List模式

流程流转:

其实就是一个List,但他有很多很多项,以至于需要用户手动翻页查看。

用户选择More菜单就是往后翻,选择Prev就是向前翻。

Listing 5. PagableList sample usage

   PagableList pagablelist = new PagableList( "Paging", List.IMPLICIT);
  
   // 'this' refer to the current MIDlet
   Display.getDisplay(this).setCurrent(pagablelist);
  
   for ( int i=0; i< 100; i++ )
   {
      pagablelist.append( "Item  #"+i, null );
   }

更多代码参见

http://www.cnblogs.com/Files/zhengyun_ustc/PatternShow.rar

中的PatternShow\src\pattern\pagination。

后面四个模式来自于《Big designs for small devices
Four J2ME design patterns simplify interactive content development 》
http://www.javaworld.com/javaworld/jw-12-2002/jw-1213-j2medesign.html

 

分享到:
评论

相关推荐

    JavaME程序设计源代码

    5. **用户界面(UI)设计**:JavaME使用一种基于组件的UI模型,例如MIDP中的Canvas和Form类,开发者可以通过这些组件来创建屏幕布局和交互元素。 6. **网络编程**:JavaME提供了对HTTP、TCP/IP和SSL等协议的支持,...

    JavaME源程序代码

    3. **JavaME教程**:这表明代码可能被设计为教学材料,帮助初学者逐步学习JavaME编程,每段代码都对应一个特定的教学点。 至于“简体版代码”,这可能意味着代码注释和文档是用简体中文编写的,适合中文用户阅读和...

    JavaME中文教程.pdf

    JavaME的设计理念是轻量级和资源效率高,适用于内存和处理能力有限的设备。 #### 2. JavaME的架构与组件 JavaME的核心架构包括配置(Configuration)、配置文件(Profile)以及可选包(Optional Packages)。配置...

    Java ME嵌入式程序设计

    ### Java ME嵌入式程序设计知识点详解 #### 一、Java ME概述 - **定义**:Java ME(Java Platform Micro Edition)是Sun Microsystems为嵌入式设备和移动设备设计的一个平台。 - **特点**: - 跨平台性:可以在...

    java me实例代码

    Java ME(Micro Edition)是Java平台的一个分支,主要设计用于移动设备、嵌入式系统和其他有限资源的计算设备。这个“java me实例代码”压缩包显然包含了一些实用的示例程序,供学习者理解和掌握Java ME开发技术。...

    java me API中文手册

    Java ME (Micro Edition) 是Java平台的一个版本,专为资源有限的移动设备和嵌入式系统设计。这个API中文手册是开发者在进行Java ME应用程序开发时的重要参考资料,它提供了详细的类库、接口和方法说明,使得开发者能...

    javame讲解PPT

    JavaME,全称为Java Micro Edition,是Java技术在嵌入式...提供的"PPT"资料可能涵盖这些主题,包括详细的解释、示例代码和最佳实践,建议按照文件列表中的顺序(JAVA_1至JAVA_8)逐一学习,以便全面理解JavaME开发。

    javaME俄罗斯方块

    总之,"javaME俄罗斯方块"项目不仅展示了JavaME编程的基本技能,还体现了游戏设计、算法实现和性能优化等多个方面的能力。学习这个项目,开发者可以深入理解JavaME平台的工作原理,并掌握在资源受限环境下编写高效、...

    Java.ME嵌入式程序设计

    本书共分为11章,主要内容包括:Java ME概述、Java ME开发环境与工具、图形用户界面体系结构、高级用户界面设计、低级图形用户界面、MIDP游戏程序设计基础、MIDP网络编程、MIDP记录存储器、MMAPI多媒体程序设计、...

    javaME 开发源码javaME 开发源码

    JavaME,全称为Java Micro Edition,是Java技术在嵌入式设备和移动设备上的应用版本。这个平台主要用于开发和部署在手机、智能家电、车载系统等小型设备上的应用程序。JavaME为开发者提供了一套标准的API,使得软件...

    javame和WinMobile集成

    随着移动设备的普及和技术的发展,Java ME(Java Platform, Micro Edition)作为针对嵌入式设备和消费类电子产品设计的Java平台版本,其在移动应用开发领域发挥了重要作用。而Windows Mobile作为早期微软推出的移动...

    java me 开发大全

    在Java ME的系统架构中,主要包括CLDC(Connected Limited Device Configuration)和MIDP(Mobile Information Device Profile)两个主要组件。CLDC是为内存和处理能力有限的设备设计的,提供了一个精简的Java虚拟机...

    JavaME开发配置

    总的来说,JavaME开发配置涉及环境搭建、项目创建、代码编写、调试优化等多个环节,开发者需要具备扎实的Java基础和对MIDP API的深入理解,才能有效地开发出高质量的JavaME应用。而`wtk.txt`文件可能是这一过程中的...

    javaMe

    Java ME,全称为Java Platform, Micro Edition,是Java技术在嵌入式设备和移动设备上的一个版本,尤其针对机顶盒、手机和掌上电脑(PDA)等消费电子设备设计。这个平台允许开发者创建可以在各种小型设备上运行的应用...

    java ME游戏开发技术大全{}

    本书循序渐进地讲解如何使用Java ME技术开发移动信息设备应用程序,在最新的MIDP 2.0规范基础上深入分析Java ME的核心技术,包括配置、简表、Java ME的图形用户界面、游戏编程、记录存储、通用联网架构等基础知识,...

    JAVAME猜数字游戏

    总的来说,“JAVAME猜数字游戏”是一个综合运用Java ME技术的实例,涵盖了用户界面设计、随机数生成、逻辑控制、数据存储等多个方面的知识。通过这样的项目,开发者可以深入理解Java ME的特性和限制,以及如何在移动...

    Java ME 移动开发实例精讲

    3. **用户界面设计**:在Java ME中,MIDP的用户界面通常基于Wireless Toolkit(WTK)的GUI Builder或使用抽象窗口工具包(AWT)和轻量级用户界面工具包(LWUIT)。开发者需要掌握如何创建、布局和管理屏幕组件。 4....

    JavaMe手机围棋死活题

    JavaME手机围棋死活题是基于Java Micro Edition(JavaME)平台开发的一款移动应用程序,专为围棋爱好者设计,提供在手机上练习围棋死活题的功能。这个项目是开发者学习JavaME技术的一个实践作品,标记为第0版,意味...

Global site tag (gtag.js) - Google Analytics