`
totoxian
  • 浏览: 1034708 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

构建基于MVC+Observer模式的、艺术性的移动开发框架(KJAVA版)(一)

阅读更多
构建基于MVC+Observer模式的、艺术性的移动开发框架(KJAVA版)
Author:孙东风
Date:29/11/2007
做移动平台的开发不知不觉已经几年,先后接触过Kjava、Symbian、Windows mobile平台,做过游戏,也做过应用,而且以联网的居多。
我也时常辗转于不同平台间代码的移植,Java到C++、C++到Java,期间大多的时间浪费在平台框架的不一致性上。
而移动开发的平台又层出不穷,继以前的Kjava、Brew、Symbian、Palm、Linux、Windows mobile又先后出现了Gphone和iPhone平台。
可以想象的是,在不远的将来会有越来越多的移动开发平台。
于是,我业余时间时常在想,如果能有那么一套框架,每个公司都采用这个开源的框架来进行程序的架构,该能节省程序员多少累死的脑细胞啊!
当然,这么一套开源的首先应该是优美的、艺术性的,我一直思考如何运用艺术的眼光来看待编程。每个人都有爱美之心,每每读到别人层次关系藕断丝连的代码时,总是忍不住心情浮躁,更多时候是读了一半读不下去了。也就无从领会编写者的意图,那么程序做为一门程序员之间交流的工具也就无法彻底的发挥应有的作用。
而一份艺术性的代码是应该让后来者容易产生思维的共鸣的,艺术是简洁而优美的。
这份文档里我尝试努力构建这么一个有艺术性的移动开发框架,它有Java版本的、也有C++版本的,那么在Kjava平台和Symbian、Windows mobile平台之间移植的时候,至少可以节省不少力气。更重要的是,如果你能领会到这套框架,那么程序员之间的交流也就更容易和更方便。
这只是我一个美好的愿望,当然本人能力有限,未必真的能写出这么伟大的框架,所以也就希望更多的同行多提意见,“三个臭皮匠顶个诸葛亮呢!”。
我首先构建的是Kjava版本的移动开发框架,在这个版本完工之后,会着手Symbian版本的框架开发,关于Symbian版本的消息,可以先参考我之前写的一篇文章:
Symbian中所体现的软件编程艺术
http://blog.csdn.net/dongfengsun/archive/2007/04/08/1556704.aspx
那么怎么样的框架才算艺术性的框架?在我有限的理解和开发经验中,我觉得一份艺术性的框架应该有如下主要特征:
一:界面和数据的高度分离性,即把界面显示和数据的处理完全分离开来,把它们的耦合度减少到最低。
二:框架应该通俗易懂,而设计模式做为程序员之间交流框架的主要工具,在框架设计中应该占据重要地位,我们的框架设计中主要采用MVC+Observer模式(这里把MVC也做为Design Pattern之一)。
三:代码应该具备良好的可扩展性,任何一个模块的剥离、置换并不会对其它模块产生大的影响。
当然,如上三个特点是一个很高的境界,我只能尽自己的能力和经验来做到,更多的是希望大家能贡献出自己的经验,我们一起交流完善。
那么基于以上几点,我设计了如下的框架图:

我先大致来说明一下这个框架图。
第一,整体的框架采用了MVC+Observer模式,相信稍微有经验的同行对这两个模式并不陌生,那么同行之间交流起来也更容易领会对方的意图。
第二,整个框架的界面显示部分在View类及其前端,这部分内容也蛮多,我会抽取独立的时候专门来讲。但有几个原则,为了提高界面的可复用性,我把所有的界面控件元素全部抽取出来,原则上尽量不使用Kjava提供的高级UI。这些控件元素包括Button、SoftKey、ScrollBar等,这样以来即便把界面部分剥离出去,那么这些控件仍可以无影响的被复用。
所有的屏幕显示是由不同的Screen来组成,而View(Canvas)来负责不同Screen之间的切换,Screen来充当Layout的角色。
当然这些不同模块之间的切换、消息的派发都是一个问题,在接下来的专题里我会专门讲到。
第三,秉承“高度分离界面和数据”的原理。那么我们不应该让界面和数据里有任何耦合的地方。而界面是由View负责,数据及处理是由Model负责。而这两个模块之间又需要消息的传递,因为数据处理完了你要给用户一个结果啊,那么结果就需要显示在界面上。所以Observer模式很恰当的充当了这个角色。首先,Control实现Observer的接口,对屏幕的更新及显示进行一定程度的“封装”。其次,Control通过变量m_Model传递一个Observer给Model,从而实现对Model部分“监听”。
第四,Model后面的是“网络处理”、“本地文件系统”、“数据的存放和处理”等模块。
第五,我们看到View类里有个ControlQueue的队列,Model类里有个EventQueue的队列。ControlQueue队列负责维护View上所有的“Layout”,包括那些Screen应该被“激活”,从而处理消息。而EventQueue这个后台队列负责维护消息,在大部分的联网开发中,都会传递和接受网络数据包。那么这个EventQueue就是负责维护数据包,它在Model的线程中被“监听”,一旦有数据包到达,它就会分析这个数据包,分析完了调用Observer“监听器”把数据的状态变化反映到View类里。

这部分我们重点从high-level的层次设计了整个框架的流程,那么下面的专题里我们会具体应用这个模式来设计一个应用,并给出框架的实现代码。

分享到:
评论

相关推荐

    ToDo-list:使用MVC + Observer模式的Vanilla js中的ToDo列表

    ToDo-list:使用MVC + Observer模式的Vanilla js中的ToDo列表

    详解Observer Pattern(观察者模式)在Java中的使用原理

    该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码的...

    Observer设计模式实例

    Observer设计模式是一种经典的设计模式,在GOF 23种设计模式种 比较常用于实际。主要是有类指针传递并引用方法和消息传递响应的方法来实现。

    Java实现MVC球体

    Java实现一个模型、两个视图和两个控制器的功能软件,即采用MVC模式或者说是观察者模式,本程序通过输入球体半径,显示球体形状,面积体积等 Sphere.java package Model; import java.util.Observable; public class...

    java实现观察者模式-Java内置的观察者模式(基于Observable和Observer)

    Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用

    Observer模式的应用

    请选用适当的设计模式,编写一个股票行情分析软件,随着时间的推移和股票价格的变动,实现各种指标的动态更新(要求至少实现一个股票的分时图和K线图:为降低编程工作量,K线图可以用开盘价、收盘价、最高价、最低价...

    Observer模式

    NULL 博文链接:https://gary0416.iteye.com/blog/909427

    observer观察者模式

    observer观察者模式

    observer 模式例子的源码(天气监测问题)

    这是老师上课讲observer模式的Java例子,容易看懂。 题目:基于我们拥有专利的气象数据对象来提供各种气象报告(气象数据对象收集当前的气象数据,包括温度、湿度和气压)。初期要求提供三类报告:当前天气情况、...

    Observer 观察者模式 示例 源码 ----设计模式

    观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...

    OBserver模式设计实现

    Head First模式设计用的是Java,实现观察者模式使用C++

    Observer模式的传统实现和AOP实现

    对Observer模式的实现,引入后可直接使用。 包括传统实现和遵循AOP思想的实现

    Observer模式代码实现

    这里面是我根据observer设计模式的原理,自己写的代码!希望能给大家带来帮助!!

    MVC设计模式

    MVC(Model View Controller)模型(model)-视图(view)-控制器(controller): MVC本来是存在于Desktop...C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例。

    Java设计模式之观察者模式(Observer模式)介绍

    主要介绍了Java设计模式之观察者模式(Observer模式)介绍,Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解,需要的朋友可以...

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    设计模式C++学习之观察者模式(Observer)

    设计模式C++学习之观察者模式(Observer)

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    Android学习 ContentProvider数据更新与Observer模式.doc

    Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...

    C++ Observer模式

    23种设计模式之十六(行为模式)Observer模式

Global site tag (gtag.js) - Google Analytics