actionscript3设计模式,工厂方法,好东东
最近啃完了一本《ActionScript3设计模式》的书,感觉非常不错,思路通了好多。猛一想我正在搞的这个Game,……还有好多理念还没用上呢。不过面对一个已经开发了30%的东东,要说搞模式……我受不了了,看来那本书的实践只能留到我的下一个flash项目。
今天在网上居然找到了这本书的一章,感觉蛮好的,贴出来共享一下。
先前的模板方法实例中,createField()方法并无任何返回信息,它只是用于表达“创建足球场地”。下面我们来更新其嗲吗,让它可以创建并返回一个field对象。而不同的游戏拥有不同的场地类型,因而我们要创建一个 IField 接口用于实现所有的场地类。接口中定义了一个唯一方法: drawField() //创建场地方法
package com{
public interface IField{
function drawField():void; //创建场地
}
}
接下来,我们创建FootBallField类,它实现了IField接口。为了保持示例简洁,我们并不会绘制足球场地,不过您可以自己绘制。FootBallField类定义如下:
package com{
//足球场地
public class FootBallField implements IField{
public function drawField():void{
trace("创建足球场地")
}
}
}
工厂方法的目的就是连接两个或者多个不同但却相关联的类级别。下图展示类级别。

现在我们重新创建AbstractGame类中的createField()和initialize()方法以显示IField对象的存在。我们的createField()方法是一个工厂方法,它返回一个实现IField接口的对象。下面,我们让initialize()方法在IField对象上调用drawField()方法。如下所示:
package com{
//此类属抽象类
public class AbstractGame {
public final function initialize(){
var field:IField = createField();
field.drawField();
createTeam("red");
createTeam("blue");
startGame();
}
public function createField():IField{
throw new Error("抽象类方法")
}
public function createTeam(name:String){
throw new Error("抽象类方法")
}
public function startGame(){
throw new Error("抽象类方法")
}
}
}
该抽象类和模板算法都是完全匿名的,并且创建的具体对象都交由子类控制。下面重新FootBallGame类来创建并且返回一个FootBallField对象:
package com{
public class FootBallGame extends AbstractGame{
public override function createField():IField{
return new FootBallField();
}
public override function createTeam(name:String){
trace("创建 Team:" + name)
}
public override function startGame(){
trace("游戏开始")
}
}
}
Tags - 工厂方法 , 设计模式 , actcionscript3
浙公网安备 33010602011771号