python 工厂类设计模式
例:麦当劳自助点餐台一类的点餐系统。在触摸显示屏上,有三类可以选择的餐品:汉堡,小食,饮料。当我们选择好自己的食物,支付完成,订单就生成了。
1.汉堡以2种为例
class Burger(object):
name = ""
price = 0.0
def getPrice(self):
return self.price
def setPrice(self, price):
self.price = price
def getName(self):
return self.name
class cheeseBurger(Burger):
def __init__(self):
self.name = "cheese burger"
self.price = 10.0
class spicyChickenBurger(Burger):
def __init__(self):
self.name = "spicy chicken burger"
self.price = 15.0
2.小食
class Snack(object):
name = ""
price = 0.0
type = 'SNACK'
def getPrice(self):
return self.price
def setPrice(self, price):
self.pirce = price
def getName(self):
return self.name
class chips(Snack):
def __init__(self):
self.name = 'chips'
self.price = 6.0
class chickenWings(Snack):
def __init__(self):
self.name = "chicken wings"
self.price = 12.0
3.饮料
class Beverage(object):
name = ""
price = 0.0
type = "BEVERAGE"
def getPrice(self):
return self.price
def setPrice(self, price):
self.price = price
def getName(self):
return self.name
class coke(Beverage):
def __init__(self):
self.name = 'coke'
self.price = 4.0
class milk(Beverage):
def __init__(self):
self.name = 'milk'
self.price = 5.0
以上的Burger, Snack,Beverage都可以认为是该快餐店的产品,由于只提供了抽象方法,我们把它们叫抽象产品类,而cheese burger登6个由抽象产品类衍生出的子类,叫作具体产品类,接下来,"工厂"就要出现了。
class foodFactory(object):
type = ""
def createFood(self, foodClass):
print(self. type, "factory produce a instance")
foodIns = foodClass()
return foodIns
class burgerFactory(foodFactory):
def __init__(self):
self.type = "BURGER"
class snackFactory(foodFactory):
def __init__(self):
self.type = "SNACK"
class beverageFactory(foodFactory):
def __init__(self):
self.type = "BEVERAGE"
foodFactory为抽象的工厂类,而burgerFactory,snackFactory,beverageFactory为具体的工厂类
if __name__ == '__main__':
burger_factory = burgerFactory()
snack_factory = snackFactory()
beverage_factory = beverageFactory()
cheese_burger = burger_factory.createFood(cheeseBurger)
print(cheese_burger.getName(), cheese_burger.getPrice())
chicken_wings = snack_factory.createFood(chickenWings)
print(chicken_wings.getName(), chicken_wings.getPrice())
coke_drink = beverage_factory.createFood(coke)
print(coke_drink.getName(), coke_drink.getPrice())
业务中先生成了工厂,然后用工厂中的createFood方法和对应的参数直接生成产品实例。打印结果为:
BURGER factory produce a instance
cheese burger 10.0
SNACK factory produce a instance
chicken wings 12.0
BEVERAGE factory produce a instance
coke 4.0