我理解的设计模式:工厂模式
来源:互联网 发布:美国大律师 知乎 编辑:程序博客网 时间:2024/04/30 02:56
写在前面:本文示例由Lua编写,可在Lua跑通。
工厂模式实质是实例化类的一种模板。
它为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
适用场景举例:游戏中,我们有三类怪物(Mob), 怪物A, 怪物B, 怪物C要创建。此时我们可以使用工厂类MobFactory,提供一个接口 MobCreate() ,这样怪物的创建者就不要关心怪物实例化的具体过程。
工厂模式分为三类:
简单工厂模式(Simple Factory):又被称为静态工厂模式,属于类创建模式。
可以根据参数的不同,返回不同的实例。
local MobA = {}function MobA.create() print("I am Mob A")endlocal MobB = {}function MobB.create() print("I am Mob B")endlocal MobC = {}function MobC.create() print("I am Mob C")endlocal MobConf = { A = MobA, B = MobB, C = MobC,}local MobFactory = {}function MobFactory.createMob(mobType) return MobConf[mobType].create()endMobFactory.createMob("B")控制台:I am Mob B
工厂方法模式(Factory Method):工厂父类负责定义创建产品对象的公共接口,
而工厂子类则负责生成具体的产品对象。实例化具体的产品类交由工厂子类决定。
这样做符合了开闭原则,但是把对类别的判断,从工厂中移到外部。
local MobA = {}function MobA.create() print("I am Mob A")endlocal MobB = {}function MobB.create() print("I am Mob B")endlocal MobC = {}function MobC.create() print("I am Mob C")endlocal MobFactory = {}function MobFactory.createMob()endlocal MobAFactory = {}function MobAFactory.createMob() MobA.create()endlocal MobBFactory = {}function MobBFactory.createMob() MobB.create()endlocal MobCFactory = {}function MobCFactory.createMob() MobC.create()endMobBFactory.createMob()控制台:I am Mob B(注:Lua的metatable可以定义class,以实现面向对象编程,所有的工厂应该继承MobFactory)
抽象工厂模式(Abstract Factort):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
在我理解,抽象工厂模式就是对 工厂方法模式进行工厂模式的处理。
简单举例:现在有怪物A, B, C。A, B, C通过工厂创建分别是
MobAFactory.createMob()
MobBFactory.createMob()
MobCFactory.createMob()
创建新的工厂:
AbstractMobFactory, 只要给他传参数,创建出怪物,二无需关心怪物生成的具体类。
版权声明: 本文为博主原创文章,未经博主允许不得转载。若本文内容侵权请告知,即刻删除。
如有错误,欢迎指出。可在下方评论,也可联系我。
Contact me:
QQ:812123870
e-mail:dxmdxm1992@gmail.com
- 我理解的设计模式:工厂模式
- 设计模式---工厂模式,我的理解,总结
- 工厂模式--我的理解
- 设计模式-工厂模式的理解
- 我对工厂模式的理解
- 我对抽象工厂模式的理解
- 我理解的设计模式
- 设计模式,我理解的代理模式
- 设计模式之简单工厂的理解
- 工厂设计模式的简单理解
- 工厂设计模式及理解
- C#----设计模式接口 工厂模式的理解
- 个人对于PHP设计模式之工厂模式的理解
- 设计模式之abstract factory工厂模式的理解
- 工厂模式的理解
- 工厂模式的理解
- 工厂模式的理解
- 工厂模式的理解
- Java 注解
- 基于继承的设计与构造函数和析构函数的开销之间的关系
- 记录lua的table转string一个问题
- 程序员面试经典之链表分割
- hiho 50 Fleury算法求欧拉路径
- 我理解的设计模式:工厂模式
- Android小错误收集
- ios开发总结之UIImageView常用属性
- 如何使 类的成员函数作为回调函数
- JavaScript与OC的相互调用
- 使用UIWebView时objective-c与javascript互相调用
- SiteWhere用户使用手册
- 61. Rotate List
- [剑指offer]复杂链表的复制