设计模式之工厂模式

简单工厂设计模式

示例代码如下:

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()

posted @ 2021-03-15 15:52  程序员陈师兄cxycsx  阅读(78)  评论(0)    收藏  举报