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

news/2024/7/7 12:51:30

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》。





http://www.niftyadmin.cn/n/3649743.html

相关文章

计网笔记--网络层

1--网络层概述 网络层主要问题&#xff1a; ① 网络层向运输层提供怎样的服务&#xff1f; &#xff08;可靠或不可靠&#xff09; ② 网络层寻址问题&#xff08;IP 地址&#xff09; ③ 路由选择问题 &#xff08;路径&#xff09; 重点在于&#xff1a;TCP/IP协议栈 2--网络…

Flutter:如何使用WebView插件

Displaying webpages inside of your Flutter applications is easy with the use of the WebView plugin. In our example application, we’ll look at how to create a custom Widget that can be used throughout our application to launch a WebView from anywhere. 显示…

[J2ME]手机流媒体之实作[附源码][与RTSP/MMS协议无关]

郑昀ultrapower产品名称产品版本Keyword: JavaME Streaming Audio MMAPIStreamingDemo1.0.13[J2ME]现行环境下手机实现网络媒体的流畅实时播放之简单演示(StreamingDemo)说明我的资源&#xff1a;http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo-src-1.0.13.rar 这个…

[J2ME]增强型二级菜单(增加了三级菜单以及悬浮菜单)

[J2ME]增强型二级菜单演示(AdvdMenuBar)说明我的资源&#xff1a;http://www.cnblogs.com/Files/zhengyun_ustc/AdvdMenuBar-src-1.0.26.rar 这个1.0.26版本的j2me软件&#xff0c;能够在WTK2.3beta的模拟器上运行。本源代码改自SaltedFish的增强版本的AdvdMenuBar&#xff0c;…

[J2ME QA]Target port denied to untrusted applications问题回应

[When]开发J2ME程序的时候&#xff0c;用户可能在运行Socket程序连接远端Socket服务器时出现不受信任的错误&#xff0c;如下面的代码&#xff1a; SocketConnection sc (SocketConnection)Connector.open("socket://localhost:8080");报错为&#xff1a;Uncaught e…

flutter 主题_在Flutter中使用主题

flutter 主题One great aspects of Flutter is its use of UI packages like the Material and Cupertino design systems. They work to shortcut all of the minute and repetitive design choices like the appBar height or the shadows on buttons. But obviously always …

[J2ME QA]untrusted domain is not configured问题回应

[When]第一次使用Netbean 4.0/5.0开发程序的时候&#xff0c;用户可能在运行程序时&#xff0c;遇到下面这种报错&#xff0c;导致模拟器一闪而过&#xff1a;正在通过存储根 DefaultColorPhone 来运行 域名不正确&#xff0c;请切换到 untrustedjava.lang.SecurityException: …

[j2me]二级菜单演示 开源声明

郑昀ultrapower产品名称产品版本Keyword: JavaME 二级菜单MenuBarlet1.0.20[J2ME]二级菜单演示(MenuBarlet)开源说明我的资源&#xff1a;http://www.cnblogs.com/Files/zhengyun_ustc/menubar-1.0.20-src.rar这个1.0.20版本的j2me软件&#xff0c;能够在Nokia S60系列、索爱K7…