开发MIDlet的程序员也许经常会被界面的导航问题所困扰,尤其界面比较多的时候,通常有七、八个界面就会很让人头疼了。本文讲述如何应用MVC设计模式解决这类的问题。
MVC 设计模式已经非常的成熟并在WEB Application的开发中广泛使用,apache的开源项目struts就是典型的例子。MVC的本质就是是逻辑和显示分开,通过控制器进行协调。通常我们会感到控制器比较的肥大,这个是个有争议的问题。MIDP的用户界面开发是比较简单的,只有那么20几个类。但是由于导航一般只能通过 Command来实现,所以界面增多的情况下,如果没有有效的组织那么程序写起来非常的乱,最致命的是这样的程序可读性差、扩展性差、可维护性差。
应用MVC解决这个问题的关键是提供一个桥梁作用的控制器,它通常要有一个MIDlet作为参数。例如 public UIController(PhoneBookMIDlet pbm)
{
this.phoneBookMIDlet = pbm;
}
为了传递事件,你可以定义一个内部类,在里面定义事件的代号。这样用起来非常的方便例如
public static class EventID
{
private EventID()
{
}
public static final byte EVENT_NEW_RECORD_SELECTED = 1;
public static final byte EVENT_SAVE_RECORD = 2;
public static final byte EVENT_NEWPHONE_BACK_MAINUI = 3;
public static final byte EVENT_LISTPHONE_BACK_MAINUI = 4;
public static final byte EVENT_SEARCHUI_BACK_MAINNUI = 5;
public static final byte ADD_NEW_RECORD = 100;
public static final byte SEARCH_RECORD = 101;
public static final byte CLEAR_RECORD = 102;
public static final byte LIST_RECORD = 103;
public static final byte HELP = 104;
}我们要在这个控制器内初始化各个界面类,这样我们才能根据不同的事件代号进行导航。
public void init(Model model)
{
this.display = Display.getDisplay(phoneBookMIDlet);
this.model = model;
indexFunctionUI = new IndexFunctionUI(this);
infomationUI = new InfomationUI();
newPhoneUI = new NewPhoneUI(this);
listPhoneUI = new ListPhoneUI(this);
searchPhoneUI = new SearchPhoneUI(this);
displayWelcome();
}
public void setCurrent(Displayable disp)
{
display.setCurrent(disp);
}
public void setCurrent(Alert alert, Displayable disp)
{
display.setCurrent(alert, disp);
}由于本文主要讲述如何实现导航,因此关于Model不做任何介绍。细心的话你也许可以看出来我这些代码是在完成一个电话簿的功能。在从Record Management System从入门到精通之四中我会介绍自己编写的电话本。在控制器类中最重要的就是接受事件然后进行导航,也就是显示不通的界面。因此它的事件处理的方法是这样的。
public void handleEvent( int eventID)
{
switch (eventID)
{
case EventID.ADD_NEW_RECORD:
{
display.setCurrent(newPhoneUI);
break;
}
case EventID.LIST_RECORD:
{
display.setCurrent(listPhoneUI);
break;
}
case EventID.SEARCH_RECORD:
{
display.setCurrent(searchPhoneUI);
break;
}
case EventID.EVENT_NEWPHONE_BACK_MAINUI:
{
display.setCurrent(indexFunctionUI);
break;
}
case EventID.EVENT_LISTPHONE_BACK_MAINUI:
{
display.setCurrent(indexFunctionUI);
break;
}
case EventID.EVENT_SEARCHUI_BACK_MAINNUI:
{
display.setCurrent(indexFunctionUI);
break;
}
default:
break;
}
}
public void handleEvent(int eventID, Object[] obj)
{
}这是个重载的方法,当有参数传递过来的时候我们调用后面的方法。
接下来我们看界面类,它们通常包括控制器类、界面的Item还有一些Command。
public NewPhoneUI(UIController uicontroller)
{
super(Title.add_record);
this.uicontroller = uicontroller;
nameField = new TextField(Title.name, null, 25, TextField.ANY);
mobileField = new TextField(Title.mobile, null, 25,
TextField.PHONENUMBER);
choice = new ChoiceGroup(Title.choice, ChoiceGroup.MULTIPLE);
phoneField = new TextField(Title.phone, null, 25, TextField.PHONENUMBER);
emailField = new TextField(Title.email, null, 25, TextField.EMAILADDR);
choice.append(Title.detail, null);
this.append(nameField);
this.append(mobileField);
this.append(choice);
this.addCommand(saveCommand);
this.addCommand(backCommand);
this.setCommandListener(this);
this.setItemStateListener(this);
}通常他们把控制器类作为参数传递给构造器,并在构造器内部注册监听器,绘制界面等。它们通过commandAction()方法来传递事件编号给控制器类去处理,例如
public void commandAction(Command arg0, Displayable arg1)
{
// TODO Auto-generated method stub
if (arg0 == backCommand)
{
uicontroller
.handleEvent(UIController.EventID.EVENT_NEWPHONE_BACK_MAINUI);
}
}这样就基本上完成了导航问题,扩展起来非常容易,添加一个界面类,然后在控制器类中初始化并添加适当的事件编号就可以了。
想起来,这种解决方法真是非常经典!!
分享到:
相关推荐
**J2ME中的MVC设计模式** 在J2ME中应用MVC模式,可以采用以下几种方式: 1. **轻量级MVC**:适合小型应用,模型和视图的通信较为直接,控制器的角色相对弱化。 2. **适配器模式**:视图作为模型的观察者,模型改变时...
1. **MVC设计模式**:模型-视图-控制器架构是一种将应用程序的业务逻辑、用户界面和数据存储分离的设计方式。模型负责数据处理,视图负责展示数据,控制器则处理用户输入并协调模型和视图的交互。 2. **J2ME基础**...
### MVC设计模式在客户端的应用详解 #### 一、引言 MVC(Model-View-Controller)设计模式是一种广泛应用于用户界面设计的经典架构模式。它将应用程序或其部分明确地划分为三个相互独立且功能清晰的组件:模型...
### j2me手机程序MVC模型设计 #### 一、认识MVC模型 MVC(Model-View-Controller)模型是一种广泛应用于软件工程中的架构模式,...通过合理设计和实现MVC模式,开发者可以构建出更加健壮、灵活且易于扩展的应用程序。
MVC(Model-View-Controller)模式是一种广泛应用于软件工程的设计模式,特别是在用户界面开发中。MVC模式的核心在于将应用程序的不同关注点分离,以便于管理复杂的应用逻辑。这种模式通过将程序分解为三个核心组成...
J2ME应用程序架构模型是构建在Java Micro Edition(J2ME)平台上的一种软件设计模式,主要应用于移动设备上的应用程序开发。J2ME以其简洁的开发环境、强大的跨平台能力和适应不同设备的能力,成为移动开发领域的重要...
总的来说,"PhoneBookDemo"项目展示了如何在资源有限的移动设备上利用MVC设计模式和J2ME框架实现一个功能完善的通讯录应用。通过这种方式,我们可以实现灵活、可维护的代码结构,同时充分利用J2ME的特性来优化性能和...
在Java Micro Edition (J2ME) 开发中,Model-View-Controller(MVC)模式是一种广泛采用的设计模式,它将应用逻辑、用户界面和数据存储分离,使得代码结构清晰,易于维护。MVC模式在J2ME中的应用对于构建可扩展和...
2. **MVC设计模式**: MVC模式是软件工程中的一种架构模式,它将应用程序分为三个主要组件:Model负责处理业务逻辑,View负责显示数据,而Controller接收用户输入并协调Model和View之间的交互。 3. **J2ME中的MVC...
2. MVC模式:分离模型、视图和控制器,便于管理和扩展。 3. 自动存储用户设定:利用RMS保存用户信息,提供更好的用户体验。 4. 用户设置选项:允许用户关闭如背景音乐、背光显示等功能,以节省资源。 5. 低级用户...
**标题与描述解析** 标题"NIIT第三模块考试试题及答案 ...总的来说,这份资源对于正在学习J2ME和MVC3的学员来说是一份宝贵的资料,即使不完整的答案也能激发学习者自主解决问题的能力,进一步加深对这两个技术的理解。
在J2ME客户端开发中,MVC(Model-View-Controller)模式是一种广泛采用的设计模式,用于构建可扩展且易于维护的用户界面。MVC模式将应用程序分为三个核心组件: 1. **模型(Model)**:这是应用程序的核心部分,...
在设计“SmartTicket”应用程序的过程中,需要考虑多种设计模式和技术原则,以确保系统的灵活性、可扩展性和可维护性。其中,关键的设计模式包括: - **MVC(Model-View-Controller)模式**:将应用程序划分为三个...
2. **J2ME应用开发人员**:负责开发各种移动应用程序,如移动定位服务和移动商务应用。这类工作通常需要熟练掌握高级用户界面设计、线程管理和网络编程等技能。 3. **J2ME游戏移植人员**:将已有的游戏从一个平台...