AS3简单工厂模式(factory pattern)


简单工厂模式(easy factory pattern)

工厂模式的优点:

1.工厂模式可以降低模块间的耦合性,使用工厂模式创建一个对象,不需要知道创建该对象的过程和必要信息,只需要提供一个约束条件(例如:一些类名,一些协定的指令等等)就可以获取需要的对象。

2.工厂模式有一定的良好扩展性

3.屏蔽其它产品类,调用者只需要关心产品类接口(指令),因为产品类是由工厂对象实例产生的。如(var factoryMethod = new FactoryMediator("指令"))

工厂模式的应用场景:

1.工厂模式是自己new一个对象代替方案,但不是绝对的。增加工厂会增加系统发复杂性。(如:new FactoryMethod("指令"),指令控制工厂生产的产品)

2.需要灵活、有良好可扩展性。因为工厂模式屏蔽了产品,调用者只关心的是产品接口的命令(指令)而不是实现,在不改变接口的情况下,增加一种产品仅仅是只需要实现产品接口就可以了。例如:游戏里面同一个场景有NPC,主角。这几种角色只需要实现同一个接口(例如IPlayer),若以后出现新游戏角色怪物只需要实现IPlayer,该游戏系统就可以完美支持新协议了。

工厂方法的通用类:

抽象角色 <------  具体角色-------->具体工厂---------->抽象工厂(factoryMediator)

抽象产品角色:定义产品的共性,实现实物最抽象的定义(如:IPlayer拥有血量,攻击力,角色图片,角色名字等等)

抽象工厂角色:定义一个用于创建对象的接口,具体如何创建对象是由具体工厂实现。

具体角色:实现抽象角色所定义的接口。

具体工厂:实现创建对象的接口。

(注:流程图解释如下:具体工厂实现抽象工厂里面的方法属性并且实现具体角色的创建、具体角色拥有抽象角色的所有属性方法等

工厂方法通用代码:

抽象工厂:具有创建角色的方法createPlayer(instruct:String):IPlayer;

View Code
1 package
2 {
4 public interface IFactory
5 {
6 function createPlayer(instruct:String):IPlayer;
7 }
8 }

具体工厂:实现抽象方法,创建工厂同时添加角色(如:NPC,角色,怪物等等)

View Code
 1 package
2 {
3 import flash.utils.Dictionary;
4
5 public class Factory implements IFactory
6 {
7 private var player:Dictionary = null;
8
9 public function Factory()
10 {
11 player = new Dictionary(true);
12 player["player"] = Player as Class;
13 }
14
15 public function createPlayer(instruct:String):IPlayer
16 {
17 return new player[instruct]();
18 }
19
20 }
21 }

抽象角色:具有跑步方法function run():void;

View Code
1 package
2 {
3 public interface IPlayer
4 {
5 function run():void;
6
7 }
8 }

具体角色:实现跑步方法public function run():void

View Code
 1 package
2 {
3 public class Player implements IPlayer
4 {
5 public function Player()
6 {
7
8 }
9
10 public function run():void
11 {
12 //..省略千行跑步代码
13 trace("跑步");
14 }
15 }
16 }

具体场景:运行提取该角色

View Code
 1 package
2 {
3 import flash.display.Sprite;
4
5 /**
6 * @author 小雄
7 */
8 [SWF(backgroundColor = "#FFFFFF",width="1680",height="1050")]
9 public class Main extends Sprite
10 {
11 public function Main()
12 {
13 var iplayer:IPlayer = new Factory().createPlayer("player");
14 iplayer.run();
15 }
16
17 }
18 }

运行输出结果:跑步
尝试添加一个NPC,指令为NPC,NPC类实现IPlayer,工厂里面添加player["NPC"] = NPC as Class;只需要在new Factory().createPlayer("player");

以上实例虽说简单工厂,但是具备复杂工厂的能力。不论多少个工厂,可以根据指令实现。

转载于:https://www.cnblogs.com/as3Gui/archive/2012/02/14/2351349.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值