'''
:定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类。
角色:
抽象工厂角色(Creator)
具体工厂角色(Concrete Creator)
抽象产品角色(Product)
具体产品角色(Concrete Product)
工厂方法模式相比简单工厂模式将每个具体产品都对应了一个具体工厂。
适用场景:
需要生产多种、大量复杂对象的时候。
需要降低耦合度的时候。
当系统中的产品种类需要经常扩展的时候。
优点:
每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
隐藏了对象创建的实现细节
缺点:
每增加一个具体产品类,就必须增加一个相应的具体工厂类
'''
#===================1================================
# from abc import abstractmethod,ABCMeta
# class Payment(metaclass=ABCMeta):
# @abstractmethod
# def pay(self,money):
# pass
#
#
# class Alipay(Payment):
# def pay(self,money):
# print("支付宝支付%s"%money)
#
# class ApplePay(Payment):
# def pay(self,money):
# print("苹果支付%s" % money)
#
# class PaymentFactory(metaclass=ABCMeta):
# @abstractmethod
# def created_payment(self):
# pass
#
# class AlipayFactory(PaymentFactory):
# def created_payment(self):
# return Alipay()
#
#
# class ApplePayFactory(PaymentFactory):
# def created_payment(self):
# return ApplePay()
#
# af=AlipayFactory()
# ali=af.created_payment()
# ali.pay(120)
#=========================2===============================
from abc import ABCMeta,abstractmethod
class Product(metaclass=ABCMeta):
@abstractmethod
def eat(self,name):
pass
class Fruit(Product):
def eat(self,name):
print("I am eating is %s" % name)
class ChickenWing(Product):
def eat(self,name):
print("i am eating is %s"% name)
class Factor(metaclass=ABCMeta):
@abstractmethod
def product(self,name):
pass
class FruitFactor(Factor):
def product(self,name):
return Fruit()
class ChickenWingFactor(Factor):
def product(self,name):
return ChickenWing()
f=FruitFactor()
p=f.product("fruit")
p.eat("sala")
:定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类。
角色:
抽象工厂角色(Creator)
具体工厂角色(Concrete Creator)
抽象产品角色(Product)
具体产品角色(Concrete Product)
工厂方法模式相比简单工厂模式将每个具体产品都对应了一个具体工厂。
适用场景:
需要生产多种、大量复杂对象的时候。
需要降低耦合度的时候。
当系统中的产品种类需要经常扩展的时候。
优点:
每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
隐藏了对象创建的实现细节
缺点:
每增加一个具体产品类,就必须增加一个相应的具体工厂类
'''
#===================1================================
# from abc import abstractmethod,ABCMeta
# class Payment(metaclass=ABCMeta):
# @abstractmethod
# def pay(self,money):
# pass
#
#
# class Alipay(Payment):
# def pay(self,money):
# print("支付宝支付%s"%money)
#
# class ApplePay(Payment):
# def pay(self,money):
# print("苹果支付%s" % money)
#
# class PaymentFactory(metaclass=ABCMeta):
# @abstractmethod
# def created_payment(self):
# pass
#
# class AlipayFactory(PaymentFactory):
# def created_payment(self):
# return Alipay()
#
#
# class ApplePayFactory(PaymentFactory):
# def created_payment(self):
# return ApplePay()
#
# af=AlipayFactory()
# ali=af.created_payment()
# ali.pay(120)
#=========================2===============================
from abc import ABCMeta,abstractmethod
class Product(metaclass=ABCMeta):
@abstractmethod
def eat(self,name):
pass
class Fruit(Product):
def eat(self,name):
print("I am eating is %s" % name)
class ChickenWing(Product):
def eat(self,name):
print("i am eating is %s"% name)
class Factor(metaclass=ABCMeta):
@abstractmethod
def product(self,name):
pass
class FruitFactor(Factor):
def product(self,name):
return Fruit()
class ChickenWingFactor(Factor):
def product(self,name):
return ChickenWing()
f=FruitFactor()
p=f.product("fruit")
p.eat("sala")