首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JHotDraw之旅: 3.3 面临文档基本框架

2012-10-13 
JHotDraw之旅: 3.3 面向文档基本框架?通过前文, 我们大概了解了JHotDraw的MVC架构.简单的, 试想如果要实现

JHotDraw之旅: 3.3 面向文档基本框架


?

通过前文, 我们大概了解了JHotDraw的MVC架构.简单的, 试想如果要实现一个日记程序(Daily), 应该有如下步骤:

1. 定义模型(model): DialyModel. 该模型封装了程序的名称(daily), 版本(1.0), 版权(你);

2. 定义视图(view):DailyView. 该视图可以是一个JPanel, 里面包括一个填写日记内容的JTextPane, 两个用于保存和打开的按钮(仅仅是按钮, 并没有按钮按下的动作);

3. 定义控制类(controller): 定义用于保存和打开日记的控制方法.

4. 将视图添加到模型: 通过model.setView/ViewClass方法将DailyView添加到DialyModel.

5. 将模型添加到应用程序:创建一个DailyApplication, 并通过setModel方法添加模型;

6. 启动程序: 调用DialyApplication.launch 方法.

?

?

下面补充JHotDraw框架(framework)主要接口的框架契约(contract of a framework).

?

设计模式:Framework(框架)

以下的接口和org.jhotdraw.app.action 包里所有类定义了面向文档应用程序的契约: ApplicationModel(org.jhotdraw.app), View(org.jhotdraw.app).

?

1. 接口 Application (org.jhotdraw.app) 应用程序

JavaDoc:??

??? Application 用于控制View类的生命周期并提供一个窗口来显示View类.

??? 一个application拥有一个ApplicationModel, ApplicationModel封装了关于application的信息(名称,版本,版权)以及创建View的模板方法.

??? application实现了基于文档界面的风格(document interface style),? 一个application可以同时处理一个或者多个文档.

??? 典型的文档界面有单文档界面(SDI, Single Document Interface), 多文档界面(MDI, Multiple Document Interface)和Mac系统界面(OSX, Mac OS X Application Interface). 针对这些文档风格, JHotDraw已经提供了每种文档的默认实现.

??? 一些应用程序需要对所有打开的窗口和对话窗进行特别的设置, 这就需要在打开JFrame, JDialog或JWindow时调用application的addWindow/Palette 或removeWindow/Palette方法.(仅7.4之后的版本)

???

?该类的使用方法:

? public class MyMainClass {
???? public static void main(String[] args) {
???????? Application app = new SDIApplication(); // or OSXApplication(), MDIApplication().
???????? DefaultApplicationModel model = new DefaultApplicationModel();
???????? model.setName("MyApplication");
???????? model.setVersion("1.0");
???????? model.setCopyright("Copyright 2006 (c) Werner Randelshofer. All Rights Reserved.");
???????? model.setViewClassName("org.jhotdraw.myapplication.MyView");
???????? app.setModel(model);
???????? app.launch(args);
???? }

?

2. 接口 ApplicationModel (org.jhotdraw.app) 应用程序模型

ApplicationModel提供Application的元数据(名称,版本,版权),?Application的控制器, 创建视图,工具栏及URIChooser的工厂方法.

?

3. 接口 View(org.jhotdraw.app) 视图

? View通过JComponent来显示应用程序的文档.

? 文档以URI格式定位(一个文档的URI应为 file://home/readme.txt). 如果在多视图界面中打开同一个文档, 则应用程序将为每个文档设置"多重打开标志"来区分这些视图.

? view(视图)的生命周期由application控制, 一个view的生命周期为:

??? 1.创建(Creation): 应用程序通过调用view类的newInstance()方法将view实例化;

??? 2.初始化(Initialisation): 应用程序调用view类的以下方法: setActioinMap(), setApplicatiin(), init().然后通过工作者线程(worker thread)调用clear()或者read()方法;

??? 3. 开始(Start):应用程序将view添加到一个容器(如JFrame)中, 并调用view类的start方法.

??? 4. 激活(Activation): 当view在应用程序中被激活时, 应用程序调用其activate()方法.

??? 5. 钝化(Deactivation):当view不处在被激活状态(如其它view被激活), 在应用程序调用其deactivate(0方法. 钝化的view可以再次被激活;

??? 6. 停止(Stop):应用程序调用view的stop()方法来停止view, 并将其从应用程序容器中删除. 停止后的view可以通过开始(Start)再次显示.

??? 7. 销毁(Dispose):当一个view不再需要时, 应用程序调用其dispose()方法来销毁一个view. dispose()方法通过setApplication(null)并删除所有对它的引用而进入垃圾回收机制.

?

?

4.?包 org.jhotdraw.app.actions 控制器

? 提供"面向文档的应用程序"的抽象动作(abstract actions)及其默认实现的动作. 按照框架契约, 应用程序层次的所有动作都必须继承自org.jhotdraw.app.actions.AbstractApplicationAction类.? 该类定义了诸如此类的属性:当应用程序处在disable状态时, 所有继承自AbstractApplicationAction的动作(控制器)的状态也都为disable. 基于swing的特性, 所有继承自AbstractApplicationAction的动作(控制器)既可以作为一个菜单项(menu item),也可以作为工具栏按钮. 当然, 这些动作也可以仅添加在指定的视图上.

? org.jhotdraw.app.actions还定义了应用程序的一些基本动作(控制器)的默认实现类,如"关于","退出","复制","剪切"等.

?

未完待续....

?

?

热点排行