基类工厂只写设计逻辑 不写具体逻辑实现 具体逻辑实现由下面的子类去实现!
工厂方法模式相当于在简单工厂模式的基础上增加一个抽象工厂(本例中为Store类),在简单工厂模式下如果增加一个其他4s店,要修改工厂类,不符合开闭原则。在工厂方法下,只需要增加具体工厂(BMWFactory、XiandFactory)和具体4s店铺(BMWStore、XiandStore)即可。
抽象工厂,类似于一个总店4s店销售全部车型的工厂,这些汽车是一个汽车族。是在工厂方法下的扩展。比如一个4s店的类型(宝马4s店、奔驰4s店),可以通过直接改变具体工厂的实例来改变具体的4s店为哪种车型的4s店。
#创建工厂类 只定义逻辑 不实现任务逻辑操作
class Store(object):
#派生类(子类)需要重写该方法 基类(父类)不写任何实现
def selectCar(self):
pass
#子类需要实现的,最终调用的方法
def order(self,carType):
Car.name = carType
return self.selectCar(carType)
#建立某个4s店 继承工厂
class BMWCarStore(Store):
def selectCar(self, carType):
return BMWFactory().selectCar(carType)
#建立某个4s店 继承工厂
class XiandStore(Store):
def selectCar(self, carType):
return XiandFactory().selectCar(carType)
#工厂的具体容易变动的模块
class BMWFactory(object):
def selectCar(self, carType):
if carType == "mini":
return Mini()
elif carType == "x6":
return X6()
#工厂的具体容易变动的模块
class XiandFactory(object):
def selectCar(self, carType):
if carType == "suonata":
return Suonata()
elif carType == "mingtu":
return Mingtu()
#汽车父类
class Car(object):
#类属性
name = ""
#类实例方法
def move(self):
print("%s车在移动..."%Car.name)
def music(self):
print("%s正在播放音乐..."%Car.name)
def stop(self):
print("%s车在停止..."%Car.name)
#汽车类型对象
class Mini(Car):
pass
class Suonata(Car):
pass
class X6(Car):
pass
class Mingtu(Car):
pass
#具体调用方法
carStore = BMWCarStore()
car = carStore.order("x6")
car.move()
car.music()
car.stop()
#打印结果
'''
x6车在移动...
x6正在播放音乐...
x6车在停止...
'''