最近啃完了一本《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
转载于:https://www.cnblogs.com/pelephone/articles/flash-actionscript-design-factory.html
相关资源:Konva基础文档