一分钟了解python的责任链模式
在 Python 中,Chain of Responsibility Pattern 是一种常用的设计模式。它是一种行为性模式,通常被用于处理多个对象之间的请求。该模式可以帮助我们更好地组织代码,提高程序的灵活性和可维护性。下面我们将通过一个例子来说明 Chain of Responsibility Pattern 的应用。
假设我们正在开发一个电商网站,这个网站需要处理用户的订单请求。用户可以选择不同的付款方式来支付订单,比如信用卡、支付宝和微信支付等。我们需要设计一个程序,用于处理用户的订单请求,并选择合适的付款方式进行支付。
我们首先定义一个订单类 Order,它包含一些基本的订单信息,比如订单编号、订单金额和付款方式等。
(资料图)
class Order:
def __init__(self, order_number, amount, payment_method):
self.order_number = order_number
self.amount = amount
self.payment_method = payment_method
我们接下来定义一个付款处理器类 PaymentHandler,它是一个抽象类,用于处理付款请求。每个付款处理器类都应该实现一个 process 方法,用于处理付款请求。
from abc import ABC, abstractmethod
class PaymentHandler(ABC):
def __init__(self, successor=None):
self.successor = successor
@abstractmethod
def process(self, order):
pass
接下来我们定义具体的付款处理器类 CreditCardPaymentHandler、AlipayPaymentHandler 和 WeChatPaymentHandler,它们分别用于处理信用卡、支付宝和微信支付的请求。每个具体的付款处理器类都实现了 process 方法,用于处理付款请求。
class CreditCardPaymentHandler(PaymentHandler):
def process(self, order):
if order.payment_method == 'Credit Card':
print(f"Payment processed with credit card. Order number: {order.order_number}")
elif self.successor is not None:
self.successor.process(order)
class AlipayPaymentHandler(PaymentHandler):
def process(self, order):
if order.payment_method == 'Alipay':
print(f"Payment processed with Alipay. Order number: {order.order_number}")
elif self.successor is not None:
self.successor.process(order)
class WeChatPaymentHandler(PaymentHandler):
def process(self, order):
if order.payment_method == 'WeChat':
print(f"Payment processed with WeChat. Order number: {order.order_number}")
elif self.successor is not None:
self.successor.process(order)
注意,每个具体的付款处理器类都继承自抽象类 PaymentHandler,并实现了 process 方法。如果处理器无法处理当前订单的付款方式,则将请求传递给下一个处理器,直到有一个处理器能够处理为止。
接下来我们需要组织具体的付款处理器类,形成一个链式结构。我们可以使用一个简单的函数来实现这个过程。首先我们创建所有具体的付款处理器类的实例,然后按照它们能够处理的付款方式的顺序依次链接它们。
def create_chain():
credit_card_handler = CreditCardPaymentHandler()
alipay_handler = AlipayPaymentHandler()
wechat_handler = WeChatPaymentHandler()
credit_card_handler.successor = alipay_handler
alipay_handler.successor = wechat_handler
return credit_card_handler
在这个函数中,我们创建了 CreditCardPaymentHandler、AlipayPaymentHandler 和 WeChatPaymentHandler 三个具体的付款处理器类的实例,并将它们链接在一起,形成一个链式结构。
现在我们可以使用这个链式结构来处理用户的订单请求了。例如:
chain = create_chain()
order1 = Order("0001", 50, "Credit Card")
order2 = Order("0002", 100, "Alipay")
order3 = Order("0003", 150, "WeChat")
chain.process(order1)
chain.process(order2)
chain.process(order3)
这个程序将输出如下内容:
Payment processed with credit card. Order number: 0001
Payment processed with Alipay. Order number: 0002
Payment processed with WeChat. Order number: 0003
这个例子中,我们使用 Chain of Responsibility Pattern 来处理用户的订单请求。我们定义了一个抽象类 PaymentHandler,用于处理付款请求,并创建了具体的付款处理器类 CreditCardPaymentHandler、AlipayPaymentHandler 和 WeChatPaymentHandler,用于处理不同的付款方式。我们将这些处理器类链接起来,形成一个链式结构。当用户发起订单请求时,我们将其传递给链式结构的第一个处理器类,如果这个处理器类无法处理当前请求,则将其传递给下一个处理器类,直到有一个处理器类能够处理为止。这个模式可以帮助我们更好地组织代码,提高程序的灵活性和可维护性。
-
一分钟了解python的责任链模式
哔哩哔哩 2023-04-25
-
当前聚焦:魔兽世界灵翼幼龙怎么获得(wow灵翼幼龙坐骑获取方法)
互联网 2023-04-25
-
凯立德激活码生成器使用_凯立德激活码生成器 全球微动态
互联网 2023-04-25
-
产业飞地架起共富桥|每日消息
经济日报 2023-04-25
-
谷歌折叠屏配置曝光!渲染图抢眼,跟OPPO Find N2外观神似_速看料
真铭天子数码产品评测 2023-04-25
-
丰田章一郎追思告别会在东京举行
中国新闻网 2023-04-25
-
全球快消息!开心泡泡猫为什么不能玩游戏_开心泡泡猫为什么不能玩
互联网 2023-04-25
-
头条:因瑞信未能披露客户资金外流以及风险和合规控制措施,瑞士信贷集团面临一项新的集体诉讼
和讯宋政 2023-04-25
-
外交部回应中国驻法大使相关言论_全球讯息
腾讯网 2023-04-25
-
全球讯息:湖北突破性发展五大优势产业带动产业能级提升
中国新闻网 2023-04-25
-
一分钟了解python的责任链模式
哔哩哔哩 2023-04-25
-
当前聚焦:魔兽世界灵翼幼龙怎么获得(wow灵翼幼龙坐骑获取方法)
互联网 2023-04-25
-
凯立德激活码生成器使用_凯立德激活码生成器 全球微动态
互联网 2023-04-25
-
产业飞地架起共富桥|每日消息
经济日报 2023-04-25
-
谷歌折叠屏配置曝光!渲染图抢眼,跟OPPO Find N2外观神似_速看料
真铭天子数码产品评测 2023-04-25
-
丰田章一郎追思告别会在东京举行
中国新闻网 2023-04-25
-
全球快消息!开心泡泡猫为什么不能玩游戏_开心泡泡猫为什么不能玩
互联网 2023-04-25
-
头条:因瑞信未能披露客户资金外流以及风险和合规控制措施,瑞士信贷集团面临一项新的集体诉讼
和讯宋政 2023-04-25
-
外交部回应中国驻法大使相关言论_全球讯息
腾讯网 2023-04-25
-
全球讯息:湖北突破性发展五大优势产业带动产业能级提升
中国新闻网 2023-04-25
-
如何在沧州申请小额贷款?
希财网 2023-04-25
-
今日热闻!伊东绘理种子 伊东绘理
城市网 2023-04-25
-
Mysteel日报:乐从冷轧及镀锌板卷持续下跌|世界观焦点
我的钢铁网 2023-04-25
-
资讯:爱康科技:拟定增募资不超3亿元 用于高效异质结光伏电池建设项目
证券时报网 2023-04-25
-
伦敦金属交易所(LME)铝库存减少1800吨
新华财经 2023-04-25
-
境外机构独立办学非唯一,梳理海南中外高校“朋友圈”_天天实时
北京商报官方账号 2023-04-25
-
全球要闻:五一假期临近,白云机场乘机热点问答来了
大洋网 2023-04-25
-
我省提升病原体高通量基因测序和分析能力 世界新要闻
山西日报客户端 2023-04-25
-
当前速读:京东金条怎么涨额度?一文学会五种提额办法
互联网 2023-04-24
-
希尔斯基上将:站在乌克兰这边的俄罗斯人|世界报道
江南才进 2023-04-24
-
生吃黄瓜的功效与作用是什么_生吃黄瓜的功效与作用
科学教育网 2023-04-24
-
卫宁健康2023年第一季度营收4.49亿 业务收入同比下降
挖贝网 2023-04-24
-
丰田致炫用什么机油好,致炫机油加多少升 动态焦点
腾赚网 2023-04-24
-
2023年奉化区幼儿园招生计划大汇总_全球微头条
本地宝 2023-04-24
-
最新快讯![快讯]鼎智科技:中信建投证券股份有限公司鼎智科技调整募集资金投资项目拟投入募集资金金额的核查意见
中财网 2023-04-24
-
电脑开机卡在欢迎界面一直转圈(win7停在欢迎界面转圈)-环球新资讯
聚焦网 2023-04-24
-
超实用!2023中级经济师《经济基础知识》37章学习打卡表
正保会计网校 2023-04-24
-
世界视讯!患者心力衰竭死亡,中荷人寿拒赔20万身故保险金 法院判了
科技金融在线 2023-04-24
-
焦点精选!碌曲县与浙江利欧集团举行高原山泉山泉水厂建设项目签约仪式
搜狐号-信息新报 2023-04-24
-
以案释法 | 清洁工工作后回家亡故 能否认定工伤
法治日报 2023-04-24