Browse > Home > Archive: 一月 2008

| Subcribe via RSS

AS3设计模式:模板方法模式(Template Method Pattern)

一月 29th, 2008 | No Comments , 529 views | Posted by flashlizi in Design Pattern

什么是模板方法(Template Method)模式?

我们经常会用到template,使用过PPT或者office工具的人都应该非常清楚template的作用。模板方法模式是最为常见的模式之一,它是基于继承的代码复用思想,其结构和用法也体现了面向对象程序设计的核心。

模板方法模式的结构由抽象类(Abstract Class)和具体子类(Concrete Class)两部分组成。抽象类就像一个模板,给出了一个对象的轮廓和骨架。它包含一些基本方法(primitive method),但并没有具体实现,就像接口Interface一样,这些基本方法由具体子类来实现。抽象类还包含一个将这些基本方法集合起来的方法,叫做模板方法(template method),由此而产生了模板方法模式。

AS3中的抽象类(Abstract Class)

抽象类无法实例化instantiate,只能扩展extend。与接口Interface只定义公开方法名而不实现不同,抽象类定义了接口和实现。我们接触的一些AS3的内置类,如DisplayObject和InteractiveObject等都是抽象类。AS3并不支持抽象类,但是我们还是可以使用抽象类和和抽象方法的思想。在C#/Java等语言中可以使用abstract关键字定义抽象方法,这样子类必须覆盖这些抽象方法。但是AS3中没有abstract关键字,因此我们可以在抽象方法里抛出错误的方法,这样如果在运行时runtime调用抽象方法就会抛出一个错误,但可以编译通过。

模板方法(Template Method)模式示例

相信大家都用过文章内容管理系统(CMS),通常里面会有一个文章模板,大家使用文章模板来发表文章。下面我们来看看模板方法模式是如何实现这个过程的。

1、定义文章模板抽象类ArticleTemplate:

2、定义Actonscript文章子类ASArticle:

3、再定义Javascript文章子类JSArticle:

4、最后我们来看看测试类Test:


运行结果为:

创建AS文章标题: AS3设计模式

创建AS文章作者: flashlizi

创建AS文章内容: 模板方法模式的具体内容

AS文章发布成功

创建JS文章标题: JavaScript内存泄露

创建JS文章作者: RIAidea.com

创建JS文章内容: JavaScript内存泄露的文章内容

JS文章发布成功

点击下载示例源文件

JavaScript内存泄露侦探器

一月 28th, 2008 | No Comments , 575 views | Posted by flashlizi in Javascript

Microsoft的一位工程师开发了一个JavaScript内存泄露侦探器工具:JavaScript Memory Leak Detector,只支持IE浏览器。当打开IE时,IE就会加载这个侦探器。这样这个侦探器就可以很容易侦察到IE核心API的调用。因此,它可以很容易的侦查到JS引擎的任何动作。
有需要的朋友可以去看这里:Microsoft JavaScript Memory Leak Detector

另外,关于JavaScript 中的内存泄漏,推荐大家看下这篇文章:JavaScript 中的内存泄漏模式

AS3设计模式:备忘录模式(Memento Pattern)

一月 28th, 2008 | No Comments , 528 views | Posted by flashlizi in Design Pattern

什么是备忘录(Memento)模式?

在不破坏封装性的前提下,保存一个对象当前的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。这就是Memento模式需要解决的问题。

Memento模式并没有一个非常准确的API,但是它大致涉及到3个角色:originator(发起者),memento(备忘录),caretaker(管理者)。originator可以是任何你要保存状态的对象,它必需定义设置和获取memento的方法,用来保存和恢复状态。memento跟originator是紧密相关的,因为它要保存originator的状态,就必须知道需要保存的状态的类型及数量。caretaker提供保存及恢复memento的方法。

Memento模式是如何实现的?

经常使用计算机的人恐怕对系统备份(Memento)不会陌生,当你的Windows系统运行正常时,对它进行备份,当系统运行有问题时,就可以调用备份快速的将系统恢复,这样就可以大量节省重新装系统的时间。下面我们来看看用Memento模式是如何实现这个过程的。

1、定义操作系统WindowsSystem类,即Memento模式中的originator:

2、定义备份Memento类,即Memento模式中的memento:

3、定义用户(User)类,即Memento模式中的caretaker:

4、最后我们来看看测试类Test:

输出结果为:
当前系统状态为:正常
当前系统状态为:异常
当前系统状态为:正常

总结:

此例非常简单,保存的状态是一个字符串属性_state。在实际应用中,我们保存的状态属性可能不止一个。另外,这里的User只保存最后一个memento,在有些情况下我们可能需要保存一系列memento,即保存多个备份,然后根据不同的情况选择不同的备份进行恢复。因此需要修改caretaker来进行调整。这个在游戏开发中可能会经常遇到。

点击下载此例的源码

ActionScript代码显示器:ASFormatter

一月 24th, 2008 | 2 Comments , 621 views | Posted by flashlizi in Flash CS3/AS3

一个简单的ActionScript代码显示器。XML定义关键字、字符串、评论等的高亮,目前只定义了部分AS3的语法高亮,以后随着代码的添加需求再更新XML。AS代码存放在html页面的script的CDATA中。作用是仿照wordpress中的一个FlashTextEditor插件,用来在这个blog中贴AS代码。发现blog的ubbeditor和fckeditor的插入html代码的功能都不行后,我修改了博客程序,现在基本支持此功能了。以后贴的代码,阅读就方便多了。

下面随便贴段AS3代码来演示下:

RIAidea正式启用,诚招友情链接

一月 20th, 2008 | 4 Comments , 581 views | Posted by flashlizi in News

原来的blog因为空间商需要特殊备案才能开放,因此写了一阵就停滞了。上周由蓝色理想的域名想到RIAidea,于是决定注册重新开始写blog,周六花了点时间弄了个简单的皮肤,今天就算是正式启用了。这几天会先把我原来flashrek.com上的一些文章搬过来。呵呵,这也算是08年的头一件大事吧。