峰之博纹 - Pelephone个人博客

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

posted @ 2008-11-14 19:27  Pelephone  阅读(298)  评论(0)    收藏  举报