您现在的位置是:主页 > news > 做论坛网站要多少配置的服务器/下载百度语音导航地图
做论坛网站要多少配置的服务器/下载百度语音导航地图
admin2025/5/2 15:11:54【news】
简介做论坛网站要多少配置的服务器,下载百度语音导航地图,什么平台引流最快,电脑游戏网页行为型模式-责任链模式责任链模式(Chain of Responsibility)解决请求处理问题描述适用环境优点:缺点:违反原则:代码实现责任链模式(Chain of Responsibility) 解决请求处理问题 描述 通过将多…
做论坛网站要多少配置的服务器,下载百度语音导航地图,什么平台引流最快,电脑游戏网页行为型模式-责任链模式责任链模式(Chain of Responsibility)解决请求处理问题描述适用环境优点:缺点:违反原则:代码实现责任链模式(Chain of Responsibility)
解决请求处理问题
描述
通过将多…
行为型模式-责任链模式
- 责任链模式(Chain of Responsibility)
- 解决请求处理问题
- 描述
- 适用环境
- 优点:
- 缺点:
- 违反原则:
- 代码实现
责任链模式(Chain of Responsibility)
解决请求处理问题
描述
通过将多个对象组成一条处理链来依次处理请求,从而使得请求能够被动态地转发和处理。这种方式可以提高代码的可维护性和可扩展性,同时也能够降低对象之间的耦合度。
适用环境
当需要将请求发送给一个或多个对象来处理时使用;当需要动态指定处理请求的对象集合时使用。
优点:
可以将请求的发送者和接收者解耦,提高系统的灵活性;可以动态地修改请求的处理顺序。
缺点:
对于过长的责任链,会影响系统的性能;可能会导致请求被多次处理。
违反原则:
单一职责原则:如果某个节点承担了太多的职责,就会违反该原则。
代码实现
书店有售后服务流程当客户提交退货申请时需要根据不同的原因和金额来进行处理。现在使用传统的方式来处理售后服务:
class Book:def __init__(self, name, price):self.name = nameself.price = pricedef return_book(self, reason, amount):if amount > 100:print(f"{self.name}需要经理审批")elif reason == 'quality':print(f"{self.name}已确认质量问题,开始退款")elif reason == 'no_need':print(f"{self.name}无需退货,请保留")else:print(f"{self.name}正在等待客服审核")book1 = Book('Python编程从入门到实践', 68.0)
book1.return_book('quality', 50.0)
以上代码存在以下问题:
1.处理逻辑过于复杂难以维护和扩展。当需要添加新的处理步骤时,需要修改原有的代码违反开闭原则。
可以通过责任链模式来解决这个问题,具体实现如下:
# 创建一个抽象类Handler,定义一个抽象方法handle_request()和一个next_handler属性,
# 具体子类需要实现handle_request()方法,并通过设置next_handler属性来构建责任链。
from abc import ABC, abstractmethodclass Handler(ABC):def __init__(self):self.next_handler = Nonedef set_next_handler(self, handler):self.next_handler = handlerreturn handler@abstractmethoddef handle_request(self, reason, amount):pass# 创建具体的处理器类,分别实现不同的处理逻辑,并通过设置next_handler属性来构建责任链。
class ManagerHandler(Handler):def handle_request(self, reason, amount):if amount > 100:print(f"{self.__class__.__name__}审批不通过,金额过大")return Falseelse:if self.next_handler:return self.next_handler.handle_request(reason, amount)else:print(f"{self.__class__.__name__}无法处理该请求")class QualityHandler(Handler):def handle_request(self, reason, amount):if reason == 'quality':print(f"{self.__class__.__name__}确认质量问题,开始退款")return Trueelse:if self.next_handler:return self.next_handler.handle_request(reason, amount)else:print(f"{self.__class__.__name__}无法处理该请求")class NoNeedHandler(Handler):def handle_request(self, reason, amount):if reason == 'no_need':print(f"{self.__class__.__name__}无需退货,请保留")return Trueelse:if self.next_handler:return self.next_handler.handle_request(reason, amount)else:print(f"{self.__class__.__name__}无法处理该请求")class CustomerServiceHandler(Handler):def handle_request(self, reason, amount):print(f"{self.__class__.__name__}正在等待客服审核")return True# 修改Book类,创建一个Handler对象并将请求交给该Handler处理。
class Book:def __init__(self, name, price):self.name = nameself.price = priceself.handler = ManagerHandler().set_next_handler(QualityHandler().set_next_handler(NoNeedHandler().set_next_handler(CustomerServiceHandler())))def return_book(self, reason, amount):if self.handler.handle_request(reason, amount) is False:print(f"{self.name}退货申请被拒绝")book1 = Book('Python编程从入门到实践', 68.0)
book1.return_book('quality', 50.0)