设计模式--创建模式-工厂方法模式
已于 2025年01月13日 22:15 修改
访问次数:17
工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,旨在通过定义一个创建对象的接口,使得子类决定实例化哪一个类。工厂方法模式允许一个类将实例化的任务推迟到其子类,从而使得代码更具扩展性和灵活性。
工厂方法模式的核心思想是通过一个抽象的工厂接口来创建对象,而具体的对象创建逻辑交给不同的子类去实现。这样,客户端代码不需要关心对象的具体创建过程,只需要通过工厂接口来获取对象实例。
结构
1. Product(产品): 定义产品的接口。
2. ConcreteProduct(具体产品): 实现`Product`接口的具体类,代表工厂方法模式创建的具体对象。
3. Creator(创建者): 定义一个工厂方法接口,返回一个`Product`对象。`Creator`可能包含一些通用的业务逻辑。
4. ConcreteCreator(具体创建者): 实现`Creator`接口,具体实现创建`Product`的逻辑。
UML类图
+--------------------+ +---------------------+
| Creator |<>---->| Product |
+--------------------+ +---------------------+
| +factoryMethod():Product| ^
+--------------------+ |
^ +---------------------+
| | ConcreteProduct |
+--------------------+ +---------------------+
| ConcreteCreator |
+--------------------+
| +factoryMethod():Product |
+--------------------+
示例
# -*- coding: utf-8 -*-
# Date: 2025/1/11
from abc import ABCMeta, abstractmethod
# 定义产品
class Payment(metaclass=ABCMeta):
# 必须实现pay函数
@abstractmethod
def pay(self, money):
pass
# 具体产品
class Alipay(Payment):
def pay(self, money):
print(f'支付宝支付{money}元。')
# 具体产品
class Wepay(Payment):
def pay(self, money):
print('微信支付 %d 元。' % money)
# 简单工厂模式,在工厂中根据参数创建指定的产品
class PaymenCreator():
def create_payment(self, method):
if method == 'Alipay':
return Alipay()
if method == 'Wepay':
return Wepay()
raise TypeError('No such payment named %s.' % method)
# 定义创建产品的接口
class CreatePayment(metaclass=ABCMeta):
@abstractmethod
def create_payment(self):
pass
class AlipayFactory(CreatePayment):
def create_payment(self):
return Alipay()
class WepayFactory(CreatePayment):
def create_payment(self):
return Wepay()
if __name__ == '__main__':
ali = AlipayFactory()
alipay = ali.create_payment()
alipay.pay(10)
评论(0)