我理解的设计模式:工厂模式

来源:互联网 发布:美国大律师 知乎 编辑:程序博客网 时间: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


1 0