小魔女 发表于 2015-1-18 11:11:38

JAVA教程之J2ME编程最好理论之屏幕导航

你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。编程|导航  除游戏程序,在一般的MIDP使用程序中,一般会有良多个Screen或Canvas,这些屏幕一样平常靠命令来完成切换,好比用户点击“Next”应当跳到下一屏,点击“Back”应当前往到上一屏。当屏幕数目相称可不雅时,怎样在各个屏幕之间导航就值得好好思索了。
  典范的MVC形式可用于屏幕导航,Model用于存储使用程序数据,而View则是各个Displayable对象,Controller必要独自的一个类完成。因为MIDlet类自己在性命周期内就只要一个实例,因而MIDlet类就十分合适作为Controller。SUN在blueprints示例程序SmartTicket中使用了十分庞大的MVC,完整能够满意MIDP使用程序的导航必要,可是能够看出,弱点是很分明的:
  一是每个事务都必要一个独一标识,switch-case语句会跟着屏幕的增添而增添,Controller变得难以保护。二是Controller援用了一切的View,这些View在程序启动时就被初始化招致很年夜的内存开支,而不论它们是不是会被显现。三是大批的Model对象和非常处置都使得全部使用程序的逻辑年夜年夜庞大。
  实践上,MIDP使用程序的良多屏幕其实不必要庞大的Controller和Model,我们的方针是满意基础的天真性的同时坚持布局复杂。因而,别的两种导航办法是用二叉树和仓库完成,这里我们只会商用仓库完成的MIDP导航框架,其基础头脑是:每以后进到下一个屏幕时,先将下一个屏幕压栈,然后再显现;当前往到上一个屏幕时,先从仓库中弹出以后屏幕,再从仓库中掏出上一个屏幕并显现。因而,每一个屏幕只必要指定要显现的下一个屏幕,而不需记着上一个屏幕。这类仓库导航模子出格合适有纪律的“行进”、“前进”屏幕。
  因为MIDlet类运转期只要一个实例,因而,利用MIDlet类作为把持器相称符合。别的,我们在一个静态变量中保留了MIDlet实例,使得会见MIDlet加倍便利:
publicclassControllerMIDletextendsMIDlet{
privatestaticControllerMIDletinstance=null;
privateDisplaydisplay=null;
privateStackui=newStack();
publicControllerMIDlet(){instance=this;}
protectedvoidstartApp(){}
protectedvoidpauseApp(){}
protectedvoiddestroyApp(booleanunconditional){}
publicstaticvoidgoBack(){
instance.ui.pop();
Objectobj=instance.ui.peek();
instance.display.setCurrent((Displayable)obj);
}
publicstaticvoidforward(Displayablenext){
instance.ui.push(next);
instance.display.setCurrent(next);
}
}
  让我们更具体地研讨一下实践的使用程序大概呈现的几种屏幕跳转情形。最复杂的情形是,从一个屏幕行进到另外一个屏幕,且前往时仍回到本来的屏幕,这类情形完整切合仓库的FIFO特性,能够间接挪用ControllerMIDlet的forward和goBack办法便可。比方,要显现一个匡助屏幕:



  关于一个联网的使用程序,另外一种情形是有一个临时的守候屏幕。上面是一个在线扫瞄图片的屏幕:



  与下面的情形所分歧的是,假如用户在屏幕3选择“前往”,则应该回到屏幕1而不是屏幕2,因而,关于屏幕2到屏幕3的切换,就不克不及forward,我们利用replace,丢弃屏幕2,从而完成屏幕3间接能够goBack到屏幕1:
publicstaticvoidreplace(Displayablenext){
instance.ui.pop();
instance.ui.push(next);
instance.display.setCurrent(next);
}
  仓库的变更以下:



  关于某些更加庞大的情形,比方,登录历程,假如同意用户选择主动登录,则屏幕跳转以下:



  假如用户不选择主动登录,则屏幕跳转以下:



  关于这类情形,办理计划是,即便用户选择了主动登录,LoginUI屏幕也要被压进仓库中,可是不显现出来,因而,我们界说了另外一个forward(Displayabled1,Displayabled2)办法,它将d1和d2顺次压进仓库,但只显现d2。在前往时,假如用户作废,则前往到LoginUI。总之,经由过程界说多个导航办法,就能够完成各类操纵。
  这类基于仓库的导航模子十分合用于有纪律的“行进”,“前进”屏幕,并且只在必要的时分天生新的屏幕。无需体贴屏幕形态,由于前往时上一个屏幕的形态被完全地保留在仓库中。
  仓库模子的弱点是数据由分歧的屏幕处置,关于一些流程而言,大概必要将每一个屏幕的数据顺次传送给下一个屏幕,越今后的屏幕其机关办法的参数大概也越多。
  关于联网操纵等触及到多线程守候屏幕的情形,我们将在前面给出一个完全的办理计划,并集成到仓库导航框架中,使使用程序自己完整不必触及到多线程联网操纵,只需专注于本身逻辑。

C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)

不帅 发表于 2015-1-20 16:42:14

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

金色的骷髅 发表于 2015-1-25 08:03:43

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

莫相离 发表于 2015-2-2 16:21:43

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

灵魂腐蚀 发表于 2015-2-6 13:54:54

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

第二个灵魂 发表于 2015-2-8 02:51:21

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

山那边是海 发表于 2015-2-10 11:46:33

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

因胸联盟 发表于 2015-3-1 10:15:07

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

愤怒的大鸟 发表于 2015-3-10 13:18:48

是一种使用者不需花费很多时间学习的语言

谁可相欹 发表于 2015-3-17 08:08:27

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

小女巫 发表于 2015-3-24 02:37:52

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
页: [1]
查看完整版本: JAVA教程之J2ME编程最好理论之屏幕导航