构建基于MVC+Observer模式的、艺术性的移动开发框架(KJAVA版)(二)
Author: 孙东风
Date:03/12/2007
在上一讲中,我们利用MVC+Observer模式设计了移动开发框架。那么,这一节里我们会以一个"媒体播放"为具体实例来实现这个框架。
首先,可以利用UML建模工具进行如下类的设计:
这个类图对应上节我们所讲解的框架设计。
以下是根据这个类图进行的具体coding:
import javax.microedition.lcdui.Graphics;
public class Controls {
boolean isActive = false;
public Controls()
{
}
public void draw(Graphics g)
{
}
}
/**
*
* @author jerry.sun
* @date 2007-11-29 下午12:43:09
*/
public class MediaPlayerControl implements MediaPlayerObserver{
public MediaPlayerView m_view;
public MediaPlayerModel m_model;
public MediaPlayerControl()
{
m_view = new MediaPlayerView();
m_model = new MediaPlayerModel(this);
}
public void SreenUpDate()
{
m_view.CanvasStatusChange();
}
}
/**
*
* @author jerry.sun
* @date 2007-11-29 下午12:40:31
*/
public class MediaPlayerModel implements Runnable{
public MediaPlayerControl m_control;
Queue tempEventsQueue;
public MediaPlayerModel(MediaPlayerControl control)
{
m_control = control;
tempEventsQueue = MediaPlayerView.eventsQueue;
}
public void parseEventsQueue()
{
Object event = tempEventsQueue.get();
int eventID = 0; //event.id;
switch(eventID)
{
case 0:
break;
case 1:
break;
case 2:
break;
default:
break;
}
m_control.SreenUpDate();
}
public void run() {
// TODO Auto-generated method stub
parseEventsQueue();
}
}
/**
*
* @author jerry.sun
* @date 2007-11-29 下午12:43:34
*/
public interface MediaPlayerObserver {
public void SreenUpDate();
}
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
/**
*
* @author jerry.sun
* @date 2007-11-29 下午12:43:43
*/
public class MediaPlayerView extends Canvas implements Runnable{
static Queue controlsQueue;
static Queue eventsQueue;
public MediaPlayerView()
{
controlsQueue = new Queue();
if(!initControlsQueue())
System.out.println("Maybe the ControlsQueue is full!");
}
public boolean initControlsQueue()
{
return controlsQueue.put(new Controls())
&&controlsQueue.put(new Controls());
//continue...
}
protected void CanvasStatusChange()
{
}
protected void paint(Graphics g) {
// TODO Auto-generated method stub
for(int i = 0;i < controlsQueue.length();i++)
{
Controls tempCon = (Controls)controlsQueue.get();
if(tempCon != null&& tempCon.isActive)
{
tempCon.draw(g);
}else
{
System.out.println("The "+tempCon+" is not activity!");
}
}
}
public void run() {
// TODO Auto-generated method stub
}
}
/**
*
* @author jerry.sun
* @date 2007-11-29 下午12:43:57
*/
public class Queue {
/** 队列的最大长度 */
public static final int MAX_SIZE = 32;
private Object queueArr[] = null;
private int queueHeadId = 0;
private int queueTailId = 0;
private int queueLength = 0;
/** 初始化 */
private void init() {
queueHeadId = 0;
queueTailId = 0;
queueArr = new Object[MAX_SIZE];
for ( int ii = 0; ii < queueArr.length; ii ++) {
queueArr[ii] = null;
}
}
/** 取下一个节点的下标 */
private static int nextID(int id) {
return ( id + 1 ) % MAX_SIZE;
}
/** 取前一个节点的下标 */
private static int preId(int id) {
return ( id + MAX_SIZE - 1) % MAX_SIZE;
}
/** 添加一个 obj 到队列,如果队列满,返回false,正常返回true */
public synchronized boolean put(Object obj) {
if ( isFull() )
return false;
queueArr[queueTailId] = obj;
queueTailId = nextID(queueTailId);
queueLength ++;
return true;
}
/**
* 队列中取出一个 obj,如果队列空,返回 null
* 取出的obj弹出队列
*/
public synchronized Object get() {
if ( isEmpty())
return null;
Object obj = queueArr[queueHeadId];
queueHeadId = nextID(queueHeadId);
queueLength --;
return obj;
}
/**
* 队列中取出一个 obj,如果队列空,返回 null
* 取出的obj不弹出队列
*/
public synchronized Object getWithoutPop()
{
if ( isEmpty())
return null;
Object obj = queueArr[queueHeadId];
return obj;
}
/**
* 当前队列中Obj个数
*/
public int length() {
return queueLength;
}
/**
* 是否队列已经满了
*/
public boolean isFull() {
return queueLength == queueArr.length;
}
/**
* 是否队列是空队列
*/
public boolean isEmpty() {
return queueLength == 0;
}
/** Creates a new instance of Queue */
public Queue() {
init();
}
}
其实在一个软件工程的实施中,前期设计是最占用时间的,一旦程序的框架能清晰的给出来。整个项目也就完成了至少60%,剩余的coding就比较简单了。这也是为什么架构师比程序员值钱的原因!呵呵,说了点题外话,希望能对大家有所启发。
那么这一讲里具体给出了整个程序的框架接口,在剩余的几讲里会具体利用这些框架接口来整合整个项目。还有一些设计的具体细节需要在以后说明,比如前端UI如何设计才能把"耦合度"降低到最低?
分享到:
相关推荐
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
在这个特定的案例中,我们将深入探讨如何在Vanilla JavaScript(原生JavaScript)中实现一个Todo List,利用Model-View-Controller (MVC)架构模式以及Observer设计模式。这两种模式在现代Web开发中都是至关重要的...
在构建MVC框架时,设计模式如Observer(观察者)和Command(命令)模式被广泛应用,以增强框架的灵活性和复用性。 - **Observer模式**:此模式定义了对象间的一对多依赖关系,使得当一个对象(目标)的状态发生变化...
此电子邮件服务应用程序是使用 JavaFx、套接字、mvc模式、Java 反射、基于 Observer 可观察模式的机制和多线程编程构建的 (1).zip
Java Swing的MVC(Model-View-Controller)模式是一种用于构建用户界面的软件设计模式,尤其在GUI(图形用户界面)开发中广泛应用。MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器...
### 基于模式设计的MVC框架原理研究 #### 摘要 本文探讨了基于模式设计的MVC(Model-View-Controller)框架原理。MVC是一种广泛应用于Web开发的设计模式,它将应用程序分为三个核心部分:模型(Model)、视图...
MVC架构模式在Java开发中的应用 ...MVC架构模式在Java开发中的应用非常广泛,特别是在基于Web的应用系统中,它可以提高系统的可维护性、可重用性和可移植性,提高开发效率,并且使得系统更容易扩展和部署。
总的来说,Observer模式是构建可扩展、可维护软件的重要工具,它允许我们以灵活的方式处理对象之间的交互,提高代码的复用性和可测试性。无论是在设计大型系统还是解决日常编程问题时,理解并熟练运用Observer模式都...
**基于RxJava+Retrofit构建的Android基础框架详解** 在移动开发领域,尤其是在Android平台,高效、可维护的代码架构是提升开发效率和产品质量的关键。本文将深入探讨如何利用RxJava和Retrofit这两个强大的库来精心...
框架基于PureMVC框架构建,旨在帮助开发出更稳定、可维护、可扩展且可重用的应用程序。为了达到这一目标,关键在于降低不同模块之间的依赖性。 1.2 框架结构 PureMVC框架分为三个主要的解耦层:Model、View和...
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...
随着技术的发展,现代框架如Spring MVC提供了更全面的MVC支持,简化了开发过程,同时也提供了更多设计模式的集成,如依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)。 总之,MVC...
在本实验报告中,我们探讨了如何利用MVC(Model-View-Controller)模式来开发Java应用程序,特别是在创建一个贪吃蛇游戏的上下文中。MVC模式是一种软件设计模式,它将应用程序分为三个主要组件,使得各部分可以独立...
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
ASP.NET MVC框架是一种用于构建Web应用程序的软件框架,它基于模型-视图-控制器(Model-View-Controller,简称MVC)设计模式。MVC模式最早由Trygve Reenskaug在20世纪70年代末为Smalltalk平台提出,它被广泛应用于...
总之,MBMvc是一个旨在提升iOS应用开发效率和质量的Swift框架,它通过引入消息机制重新诠释了MVC模式,帮助开发者构建更加健壮、可维护的代码结构。学习和掌握MBMvc,对于提升Swift开发能力具有重要的实践意义。