python工厂模式

基类工厂只写设计逻辑 不写具体逻辑实现 具体逻辑实现由下面的子类去实现!

工厂方法模式相当于在简单工厂模式的基础上增加一个抽象工厂(本例中为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车在停止...
'''

你可能感兴趣的:(python)