责任链模式 -- Chain of Responsibility Pattern
一、场景
假如此时我们需要完成一个事情的逻辑是:A对象类发送一个请求,然后B、C、D都要接收到这个请求的回调,那应该怎么做?
此时很可能就是,A接收到回调, 然后一个 for 循环
把回调分发给BCD,这样做容易让A变得耦合性非常大。如果以后业务要修改,那更加会改变结构,非常麻烦。
责任链模式
责任链模式就能非常好的处理这样的问,避免请求发送者与接收者耦合在一起,让多个对象都能接收同一个请求的回调,将这些对象连接成一条链,并且沿着这条链传递请求,避免代码之间层层耦合。
架构图
image.png- 由AbstractLogger提供接口,各个Logger类实现抽象方法,ChainPattlern来绑定Logger实现之间的绑定关系,并提供调用接口
代码实现
AbstractLogger
image.pngConsoleLogger + ErrorLogger + FileLogger
image.pngimage.png
image.png
ChainPattern
image.png总结
从上面的实现可以看出, 实际上ChainPattern 提供Logger实现类之间的实际绑定关系,从而可以让调用ChainPattern接口的类不需要关心消息传递链,也不需要处理Logger实现类之间的传递关系和数据处理。
责任链模式能够大大地减轻消息的发送者和接收者之间的耦合,而且可以让接口工具灵活地处理整个责任链的传递关系,而Logger实现类只需要专注实现具体的消息处理就可以,数据流变得很纯粹。
网友评论