博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AS3简单工厂模式(factory pattern)
阅读量:6092 次
发布时间:2019-06-20

本文共 2723 字,大约阅读时间需要 9 分钟。

简单工厂模式(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

你可能感兴趣的文章
找不到com.apple.Boot.plist
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
入门视频采集与处理(学会分析YUV数据)
查看>>
java keytool详解
查看>>
记一次Redis被攻击的事件
查看>>
Debian 的 preinst, postinst, prerm, 和 postrm 脚本
查看>>
socket编程的select模型
查看>>
IDEA和Eclipse经常使用快捷键(Win Mac)
查看>>
ubutntu apt 源
查看>>
PHP 文件处理
查看>>
cesium之核心类Viewer简介篇
查看>>
ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
查看>>
libev与libuv的区别
查看>>
iOS 为什么使用xcode8上传app包到appStore无法构建版本
查看>>
Tomcat优化步骤【转】
查看>>
CRC 自动判断大端 小端
查看>>
原来这样可以轻松恢复回收站删除文件
查看>>
DisparityCostVolumeEstimator.cpp
查看>>
(转)git中关于fetch的使用
查看>>
mongo DB for C#
查看>>