案例分析:设计模式与代码的结构特性
作者:互联网
工厂模式
工厂方法模式:工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂模式又称为创建模式,它是建对象的一种最佳方式。工厂模式的本质就是用工厂方法创建一种实例化对象的方式。一句话中总结就是方便创建同种类型接口产品的复杂对象。
举例:实例化一个对象sample 一般会想到的方法是通过构造器来创建sample s=new sample();但是在实际情况下最好不要这样做,如果sample类的在实例化的时候需要初始化参数而这些参数需要别的类的信息,这样你new的话会增加你代码的耦合度,不利于维护。所以我们就需要将创建实例的工作和使用使用实例的工作分开,即:使用工厂方法创建实例的工作封装起来。这样我们在需要调用对象的时候就不需要关心那些复杂的实例化问题。
这是某军事模拟游戏中两款战斗机的形象,图一是芬兰空军的mig 29,图二是东德空军的mig29,通过仔细观察可以发现,从模型上看,两款飞机除了涂装和所携带武器不同,其他地方完全一样(芬兰mig29只有两发中距弹,而东德mig29有两发中距弹+4发格斗弹)。游戏里有上千种单位,显然,游戏公司不可能每个单位都专门做一个模型,我们可以猜测,开发者使用了工厂模式,这样他们只需要制作一个mig29的模型,就可以实现多个不同单位,只要改改颜色以示区别即可。
图一
图二
实现步骤:
1,建立一个mig29的工厂类,定义公共接口
2,建立产品类,继承工厂类,创建具体实例
下面是尝试模拟的实例代码:
建立工厂类:
Class plane():
class Mig29_9.13s(plane):
"""
Mig-29
"""
Nation=""
Arm=[]
type='Mig29_9.13s'
#假定的一个方法,用来导入模型
Def GetModel(self):
Load(type)
def GetNation(self):
return self.nation
def GetArm(self,arm):
Self.arm=arm
#假定的一个方法,根据武器数据和机型对模型增添不同武器模型
def SetArm(self):
ArmInitialize(self.arm,self.type)
#假定的一个方法,根据国籍和机型来确定涂装样式
def SetSpray(self):
SprayInitialize(self.nation,self.type)
建立产品类:
class Finland_Mig29_9.13s(Mig29_9.13s):
def __init__(self):
self.nation="Finland"
self.arm=[[R77][2]]
class East_Germany_Mig29_9.13s(Mig29_9.13s):
def __init__(self):
self.name="East_Germany"
self.arm=[[R77][2] ,[R73][4]]
标签:Mig29,代码,9.13,工厂,arm,案例,实例,设计模式,self 来源: https://www.cnblogs.com/wjt1996/p/12006494.html