Browse > Home > Archive: 01月 2008

| Subcribe via RSS

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

01月 29th, 2008 | No Comments , 152 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内存泄露侦探器

01月 28th, 2008 | No Comments , 168 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)

01月 28th, 2008 | No Comments , 165 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

01月 24th, 2008 | 2 Comments , 232 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正式启用,诚招友情链接

01月 20th, 2008 | 4 Comments , 172 views | Posted by flashlizi in News

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

wow gold wow gold wow gold wow power leveling wow power leveling wow power leveling nike shoes nike shoes nike shoes nike shoes jordan shoes Jordan shoes jordan shoes Jordan shoes world of warcraft gold world of warcraft gold Replica handbags 1