在 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的责任链模式
- 环球快看:中国恒大:目标集团重组公告
- 杭州106岁老人一开口,大家都惊了!长寿
- 全球速看:扬电科技2022年净利6593.56万
- 当前热文:女人得了甲状腺严重吗_得了甲
- 世界要闻:崇明检察院支持起诉助力解决土
- 模型技术在平塑神头泉域岩溶水资源评价中
- 当前最新:上海:有计划分步骤实施“碳达
- 涉嫌严重违法!陕西省现代建筑设计研究院
- 国清寺介绍_国清寺始建于哪个朝代 世界
- 消息!展示冰柜不制冷的原因和解决方法_
- 阵雨频凉意浓 后天新一股冷空气抵厦|全
- 美股异动|飞利浦涨14%Q1可比营收增速、调
- 俄罗斯储蓄银行发布GigaChat 加入人工智
- 每日头条!23厦门市政SCP001今日发布发行公告
- 焦点速读:蔚来员工投诉称半年加班500小
- 广州海关发布2022年度知识产权保护十大典
- 注意!汉得信息将于5月16日召开股东大会
- 个人交职工医保,早交还是晚交好?嵩明医
- 收评:大面积飘绿!纯碱跌超4%,热卷、螺
- 23年acca考试和cfa考试哪个更适合新生?
- 明天就升温!“五一”假期天气预报也来了
- 世界热点评!快手创始人宿华成立创智探索
- 2023台州神仙居五一劳动节游玩攻略|全球
- 41岁全智贤观看儿子比赛,富二代老公引人
- 时讯:首开29.7亿!2023年丰台10万+豪宅
- 冬季安全小常识大全(安全小常识大全)
- 西上海: 西上海关于2022年度利润分配方
- 比没得of和比没得from的区别_没得比官方网站
- 今日热门!常宁市领导到市第三人民医院调
- 【独家焦点】第一轮未感染的人,会二次感
- 焦点速讯:我国首个氢能交易平台启动
- 南京经开区税务:税收优惠政策“加码”赋
- 焦点!恭喜北京四中国际课程佳莲校区_佳
- 如何制作人体紧身衣_给女生送生日礼物实
- 深圳2022年下半年自考毕业证书领取指引
- 重挫18%!CRO龙头缩水300多亿,机构越唱
- 【北京】联合飞机发布TD550无人直升机生
- 郑州铁路“五一”假期单日发送旅客或将超
- 读书之美|王子文带你阅读《三体》,感受
- 美国大型家居用品零售商申请破产保护
- 死记硬背太痛苦!2023初级《初级会计实务
- 报道:countif 重复次数_countif统计重复次数
- 仙客来叶子发黄怎么补救?仙客来的养殖方
- 最新快讯!校馆共建 打造文化艺术新品牌
- 卓越医疗丨永州市中心医院超声医学科:一
- 吴金贵:中超各队实力差距缩小,为国家队
- 郑州铁路职业技术学院2021分数线美术生
- 天天通讯!黑龙江省七台河市市场监管局开
- 深度合作帕梅拉,Keep跳出同质化竞争怪圈
- 国家知识产权局:扎实开展知识产权促进“
- 中建八局二公司成都电磁功能材料基地项目
- 【全球热闻】教育部:毕业生求职需警惕陷
- 借助 Cupra 的 Tavascan 探索电动轿
- 瓦工高薪却存在“招工难”“招年轻人更难
- ICT行业能源消耗“负”可敌国,VMware携
- “课外书”有讲究:义务教育阶段如何“读
- 单价2.88万/平起,426套住宅!传承启元 20
- 全球今日报丨苏珊米勒 今日星座运势查询
- 无敌奴役万女系统_无限之万女为奴系统
- 23年acca考试和cfa考试哪个更适合新生?
- 明天就升温!“五一”假期天气预报也来了
- 世界热点评!快手创始人宿华成立创智探索
- 2023台州神仙居五一劳动节游玩攻略|全球
- 41岁全智贤观看儿子比赛,富二代老公引人
- 时讯:首开29.7亿!2023年丰台10万+豪宅
- 冬季安全小常识大全(安全小常识大全)
- 西上海: 西上海关于2022年度利润分配方
- 比没得of和比没得from的区别_没得比官方网站
- 今日热门!常宁市领导到市第三人民医院调
- 【独家焦点】第一轮未感染的人,会二次感
- 焦点速讯:我国首个氢能交易平台启动
- 南京经开区税务:税收优惠政策“加码”赋
- 焦点!恭喜北京四中国际课程佳莲校区_佳
- 如何制作人体紧身衣_给女生送生日礼物实
- 深圳2022年下半年自考毕业证书领取指引
- 重挫18%!CRO龙头缩水300多亿,机构越唱
- 【北京】联合飞机发布TD550无人直升机生
- 郑州铁路“五一”假期单日发送旅客或将超
- 读书之美|王子文带你阅读《三体》,感受
- 美国大型家居用品零售商申请破产保护
- 死记硬背太痛苦!2023初级《初级会计实务
- 报道:countif 重复次数_countif统计重复次数
- 仙客来叶子发黄怎么补救?仙客来的养殖方
- 最新快讯!校馆共建 打造文化艺术新品牌
- 卓越医疗丨永州市中心医院超声医学科:一
- 吴金贵:中超各队实力差距缩小,为国家队
- 郑州铁路职业技术学院2021分数线美术生
- 天天通讯!黑龙江省七台河市市场监管局开
- 深度合作帕梅拉,Keep跳出同质化竞争怪圈
- 国家知识产权局:扎实开展知识产权促进“
- 中建八局二公司成都电磁功能材料基地项目
- 【全球热闻】教育部:毕业生求职需警惕陷
- 借助 Cupra 的 Tavascan 探索电动轿
- 瓦工高薪却存在“招工难”“招年轻人更难
- ICT行业能源消耗“负”可敌国,VMware携
- “课外书”有讲究:义务教育阶段如何“读
- 单价2.88万/平起,426套住宅!传承启元 20
- 全球今日报丨苏珊米勒 今日星座运势查询
- 无敌奴役万女系统_无限之万女为奴系统
- 手术及特殊检查特殊治疗后经治医师和上级
- 王建思念朋友的诗句 思念朋友的诗句 微
- 今日热议:元宇宙阅读 知识能看能听能触达
- 天天快看:慢性病包括哪些病种可以报销_
- 当前速递!传承!相差十岁胡金秋16+22完
- Linux安装ODBC连接SQLServer数据库的步骤
- 陈臣2023年一季度表现,圆信永丰优选价值
- 每日消息!谁在寻找“网红露营地”?
- 当前热点-关于“未来办公” 可能比你想
- 全球视讯!account number中文_account number
- 每日焦点!雪貂多少钱一只最便宜_雪貂多
- 一江水王洛宾吉他谱_快男李行亮弹奏的一
- 书中自有千钟粟怎么读_书中自有千钟粟
- 全球热议:广州地产一哥在上海滩栽了个跟头
- 右肾积水的治疗方法_右肾积水
- 便捷高效!枣庄薛城公共资源交易中心评标
- stp文件用什么软件打开可以编辑_stp文件
- 王俊凯被曝上海密会圈外女友!狗仔放话「
- 当前看点!商务部将采取一系列措施支持加
- “青春正是读书时”网络主题活动正式启动