设计模式之工厂模式
简单工厂设计模式
示例代码如下:
from abc import ABCMeta, abstractmethod
# 抽象产品角色
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
# 产品角色
class Alipay(Payment):
def pay(self, money):
print('支付宝支付%s元' % money)
# 产品角色
class WechatPay(Payment):
def pay(self, money):
print('微信支付%s元' % money)
# 工厂角色
class PaymentFactory:
def create_payment(self, method):
if method == 'alipay':
return Alipay()
elif method == 'wetchpay':
return WechatPay()
# 调用
pf = PaymentFactory()
p = pf.create_payment('alipay')
p.pay(100)
工厂方法模式
示例代码如下:
from abc import ABCMeta, abstractmethod
# 抽象产品角色
class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass
# 产品角色
class Alipay(Payment):
def pay(self, money):
print('支付宝支付%s元' % money)
# 产品角色
class WechatPay(Payment):
def pay(self, money):
print('微信支付%s元' % money)
# 抽象工厂角色
class PaymentFactory(metaclass=ABCMeta):
@abstractmethod
def create_payment(self):
pass
# 工厂角色
class AlipayFactory(PaymentFactory):
def create_payment(self):
return Alipay()
# 工厂角色
class WetchaFactory(PaymentFactory):
def create_payment(self):
return Wetcha()
# 调用
af = AlipayFactory()
a = af.create_payment()
a.pay(100)
抽象工厂模式
示例代码如下:
from abc import ABCMeta, abstractmethod
# 抽象产品
class PhoneShell(metaclass=ABCMeta):
@abstractmethod
def show_shell(self):
pass
class PhoneCpu(metaclass=ABCMeta):
@abstractmethod
def show_cpu(self):
pass
class PhoneOs(metaclass=ABCMeta):
@abstractmethod
def show_os(self):
pass
# 具体产品
class AppleShell(PhoneShell):
def show_shell(self):
print('苹果手机壳')
class AndroidShell(PhoneShell):
def show_shell(self):
print('安卓手机壳')
class HuaweiCpu(PhoneCpu):
def show_cpu(self):
print('华为CPU')
class AppleCpu(PhoneCpu):
def show_cpu(self):
print('苹果CPU')
class AndroidOs(PhoneOs):
def show_os(self):
print('安卓系统')
class AppleOs(PhoneOs):
def show_os(self):
print('苹果系统')
# 抽象工厂
class PhoneFactory(metaclass=ABCMeta):
@abstractmethod
def make_shell(self):
pass
@abstractmethod
def make_cpu(self):
pass
@abstractmethod
def make_os(self):
pass
class AppleFactory(PhoneFactory):
def make_shell(self):
return AppleShell()
def make_cpu(self):
return AppleCpu()
def make_os(self):
return AppleOs()
class HuaweiFactory(PhoneFactory):
def make_shell(self):
return AndroidShell()
def make_cpu(self):
return HuaweiCpu()
def make_os(self):
return AndroidOs()
# 调用
class Phone:
def __init__(self, shell, cpu, os):
self.shell = shell
self.cpu = cpu
self.os = os
def show_info(self):
self.shell.show_shell()
self.cpu.show_cpu()
self.os.show_os()
def make_phone(factory):
shell = factory.make_shell()
cpu = factory.make_cpu()
os = factory.make_os()
return Phone(shell, cpu, os)
p = make_phone(AppleFactory())
p.show_info()
浙公网安备 33010602011771号