面向对象
一:
工厂模式,单例模式,都属于设计模式
设计模式是什么?设计模式是前人对软件常见问题和架构设计出来的常用的解决方案
常见的设计模式有27种,观察者模式。。。
推荐一本书:《大话设计模式》
二:
1.简单工厂模式
我们来模拟一下汽车4s店的售货问题,首先先定义两个汽车品牌类(宝马和奥迪),即下面的BaoMa和Audio,再定义一个4s店类 (下面的CarStore类),
下面是客户实例化一个客户来买宝马车,经过4s店的判断,执行BaoMa类下面的定义的方法。这就是一个简单的工厂模式
class BaoMa():
def move(self):
print("===宝马车在移动===")
def stop(self):
print('==宝马车停车===')
class Audio():
def move(self):
print("===奥迪车在移动===")
def stop(self):
print('==奥迪车停车===')
class CarStore():
def order(self,brand):
if brand == "宝马":
car = BaoMa()
elif brand == "奥迪":
car = Audio()
return car
clientPerson = CarStore()
car = clientPerson.order("宝马")
car.move()
car.stop()
2.工厂方法模式:
定义:
定义了一个创建对象的接口
(可以理解为函数),但由子类决定要实例化的类是哪一个,工厂方法模式让类的实例化推迟到子类,抽象的CarStore提供了一个创建对象的方法createCar,也叫作工厂方法
。
子类真正实现这个createCar方法创建出具体产品。 创建者类不需要直到实际创建的产品是哪一个,选择了使用了哪个子类,自然也就决定了实际创建的产品是什么。
当买车时,有很多种品牌可以选择,比如北京现代、别克、凯迪拉克、特斯拉等,那么此时该怎样进行设计呢?
# 定义一个基本的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("索纳塔")