用星际学习设计模式之一(actionscript3版):简单工厂模式的学习
广告时间
|
|
||||||||||
寒假前课总算松下来,想去学习一下设计模式,问小宝什么书好,得到的结果是要我去找java方面的设计模式书看或者是看用星际学习PHP设计模式,java暂时还不想去碰,还是想到了用星际学习PHP设计模式这组文章,这个文章早就下了,一直也就是看一下里面的面向对象,设计模式一直没怎么看,现在开始要慢慢的开始学习啦!
首先来看简单工厂模式吧!
待解决的问题:在人族的兵营,我们靠相应玩家的输入来动态确定要造的兵种,假设是机枪兵和火焰兵。
思路:动态的根据传递的数据,新建相应的类的对象。
根据PHP版设计的示例:主要也就是利用用户按键在Barrack类里面生成相对应的类
package {
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.text.TextField;
public class Main extends MovieClip {
//生产兵的种类
var type:String="";
//生成兵营
var barrack:Barrack=new Barrack();
public function Main():void {
stage.addEventListener(KeyboardEvent.KEY_DOWN,createHandle);
}
public function createHandle(e:KeyboardEvent):void {
type=String.fromCharCode(e.charCode);
trace("fd"+type);
var product=barrack.create(type);
if(product!=null) stage.addChild(product);
}
}
}
import flash.display.DisplayObject;
class Barrack {
//maxRow:360/30-1=11;maxCol:150/30-1=4
private var row:int=0;
private var col:int=0;
public function create(type:String):DisplayObject {
if (col>4) {
return null;
}
var product;
switch (type) {
case "m" :
product=new Marine();
break;
case "f" :
product=new Fireman();
break;
default :
return null;
}
//设定生产兵的坐标
product.x=row*30;
product.y=col*30;
row++;
if (row>11) {
row=0;
col++;
}
return product;
}
}
效果预览:
用途总结:简单工厂模式可以将新建对象的任务进行封装,一旦需要增加新的返回类,只要修改负责新建对象的那部分代码。
实现总结:需要一个自动根据参数返回新建对象的工厂,比如上面兵工厂Barrack,使用的时候只需要将参数传递(type)给他的生产方法create(),无需考虑具体的生产细节。
问题:其实在createHandle这个方法里面也可以使用switch来判断用户的输入,两种方法有什么优劣呢?
源码打包下载地址:点击下载,最后感谢原作者的创意及文字!


