day 6 汽车4S店铺

1.版本1:大框架

class CarStore(object):
    '''定义一个汽车店铺类'''
    pass

class Car(object):
    '''定义一个汽车类'''
    pass

car_store = Carstore()

car.move()
car.music()
car.stop()

 

 2.版本2:买个汽车

 class CarStore(object):
     '''定义一个汽车店铺类'''
     def order(self,money):
         if money>10000:
             #xxx = Car()
             #return xxx
             return Car()
 
 class Car(object):
     '''定义一个汽车类'''
     def move(self):
         print("----我在跑--")
     def music(self):
         print("----播放音乐--")
     def stop(self):
         print("----停车区--")
 
 
 car_store = CarStore()
 car = car_store.order(100000)
 
 car.move()
 car.music()
 car.stop()
----我在跑--
----播放音乐--
----停车区--

 

 

3.版本3:买个奇瑞qq

class CarStore(object):
    '''定义一个汽车店铺类'''
    def order(self,car_type):           #耦合性高
        if car_type == "奇瑞QQ":
            return QQ()
        elif car_type == "帝豪":
            return King()

class Car(object):
    '''定义一个汽车类'''
    def move(self):
        print("----我在跑--")
    def music(self):
        print("----播放音乐--")
    def stop(self):
        print("----停车区--")

class QQ(Car):
    pass
class King(Car):
    pass

car_store = CarStore()
car = car_store.order("奇瑞QQ")

car.move()
car.music()
car.stop()

 

----我在跑--
----播放音乐--
----停车区--

 

4.版本4:通过函数def  解耦

class CarStore(object):
    '''定义一个汽车店铺类'''
    def order(self,car_type):
        return select_car_type(car_type)

def select_car_type(car_type):
    if car_type == "奇瑞QQ":
        return QQ()
    elif car_type == "帝豪":
        return King()

class Car(object):
    '''定义一个汽车类'''
    def move(self):
        print("----我在跑--")
    def music(self):
        print("----播放音乐--")
    def stop(self):
        print("----停车区--")

class QQ(Car):
    pass
class King(Car):
    pass

car_store = CarStore()
car = car_store.order("奇瑞QQ")

car.move()
car.music()
car.stop()
----我在跑--
----播放音乐--
----停车区--

     day 6 汽车4S店铺

开发文档:
    def select_car_type(car_type)
    功能:返回一个汽车对象的引用
    参数:需要得到汽车的类型

 

 5.版本5:完成CarStore 和Car的分离   简单工厂模式

class CarStore(object):
    '''定义一个汽车店铺类'''
    def __init__(self):
        self.factory = Factory()  #工厂属性= Factory类实例化的对象
    def order(self,car_type):
        return self.factory.select_car_type(car_type)

class Factory(object):
    def select_car_type(self,car_type):
        if car_type == "奇瑞QQ":
            return QQ()
        elif car_type == "帝豪":
            return King()
        elif car_type == "byd":
            return Byd()

class Car(object):
    '''定义一个汽车类'''
    def move(self):
        print("----我在跑--")
    def music(self):
        print("----播放音乐--")
    def stop(self):
        print("----停车区--")

class QQ(Car):
    pass
class King(Car):
    pass
class Byd(Car):
    pass

car_store = CarStore()
car = car_store.order("奇瑞QQ")

car.move()
car.music()
car.stop()

    day 6 汽车4S店铺

 

 6.工厂方法模式

  1)版本1:

 class  Store(object):
     def order(self,car_type):
         return self.factory.select_car_type(car_type)
 
 class CarStore(Store):
     '''定义一个汽车店铺类'''
     def __init__(self):
         self.factory = Factory()
 
 class BMWCarStore(Store):
     def __init__(self):
         self.factory = BMWFactory()
 
 class BMWFactory(object):
     def select_car_type(self):
         pass
 
 class Factory(object):
     def select_car_type(self,car_type):
         pass
 
 car_store = CarStore()
 car = car_store.order("奇瑞QQ")

 

  2)版本2:在父类定义接口,在子类实现

class  Store(object):
    def select_car(self):
        pass

    def order(self,car_type):
        return self.select_car(car_type)

class CarStore(Store):
    def select_car(self,car_type):
        return Factory().select_car(car_type)

class Factory(object):
    def select_car(self,car_type):
        pass

car_store = CarStore()
car = car_store.order("奇瑞QQ")

class BMWCarStore(Store):
    def select_car(self,car_type):
        return BMWFactory().select_car_type(car_type)

class BMWFactory(object):
    def select_car_type(self):
        pass

    day 6 汽车4S店铺

  3)版本3:优化

class  Store(object):
    '''定义一个父类Store'''
    def select_car(self):
        pass

    def order(self,car_type):
        return self.select_car(car_type)    #父类调用接口

class CarStore(Store):
    '''定义一个汽车类子类'''
    def select_car(self,car_type):
        return Factory().select_car(car_type)   #子类实现

class Factory(object):
    '''定义一个工厂类,进行判断'''
    def select_car(self,car_type):
        if car_type == "奇瑞QQ":
            return "---QQ---"
        elif car_type == "帝豪":
            return "---king---"
        elif car_type == "byd":
            return "---byd---"
        

car_store = CarStore()
car = car_store.order("奇瑞QQ")

 

 

工厂方法模式的定义

定义了一个创建对象的接口(可以理解为函数),但由子类决定要实例化的类是哪一个,工厂方法模式让类的实例化推迟到子类,抽象的CarStore提供了一个创建对象的方法createCar,也叫作工厂方法

子类真正实现这个createCar方法创建出具体产品。 创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么。