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()
----我在跑-- ----播放音乐-- ----停车区--
开发文档: 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()
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
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方法创建出具体产品。 创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么。