ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简单工厂模式 ## 函数实现 ~~~ # 定义伊兰特车类 class YilanteCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 定义索纳塔车类 class SuonataCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 用来生成具体的对象 def createCar(typeName): if typeName == "伊兰特": car = YilanteCar() elif typeName == "索纳塔": car = SuonataCar() return car # 定义一个销售北京现代车的店类 class CarStore(object): def order(self, typeName): # 让工厂根据类型,生产一辆汽车 car = createCar(typeName) return car ~~~ ## 类来实现 ~~~ # 定义伊兰特车类 class YilanteCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 定义索纳塔车类 class SuonataCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 定义一个生产汽车的工厂,让其根据具体的订单生产车 class CarFactory(object): def createCar(self,typeName): if typeName == "伊兰特": car = YilanteCar() elif typeName == "索纳塔": car = SuonataCar() return car # 定义一个销售北京现代车的店类 class CarStore(object): def __init__(self): #设置4s店的指定生产汽车的工厂 self.carFactory = CarFactory() def order(self, typeName): # 让工厂根据类型,生产一辆汽车 car = self.carFactory.createCar(typeName) return car ~~~ # 工厂方法模式 ~~~ # 定义一个基本的4S店类 class CarStore(object): #仅仅是定义了有这个方法,并没有实现,具体功能,这个需要在子类中实现 def createCar(self, typeName): pass def order(self, typeName): # 让工厂根据类型,生产一辆汽车 self.car = self.createCar(typeName) self.car.move() self.car.stop() # 定义一个北京现代4S店类 class XiandaiCarStore(CarStore): def createCar(self, typeName): self.carFactory = CarFactory() return self.carFactory.createCar(typeName) # 定义伊兰特车类 class YilanteCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 定义索纳塔车类 class SuonataCar(object): # 定义车的方法 def move(self): print("---车在移动---") def stop(self): print("---停车---") # 定义一个生产汽车的工厂,让其根据具体得订单生产车 class CarFactory(object): def createCar(self,typeName): self.typeName = typeName if self.typeName == "伊兰特": self.car = YilanteCar() elif self.typeName == "索纳塔": self.car = SuonataCar() return self.car suonata = XiandaiCarStore() suonata.order("索纳塔") ~~~ 定义了一个创建对象的接口(可以理解为函数),但由子类决定要实例化的类是哪一个,工厂方法模式让类的实例化推迟到子类,抽象的CarStore提供了一个创建对象的方法createCar,也叫作工厂方法。 子类真正实现这个createCar方法创建出具体产品。创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么