责任链定义 责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
责任链使用场景 责任链有很多的使用场景 但是最适合用的还是重构存在很多使用if-else判断逻辑的代码
责任链模式分析及实现 这里我使用集成支付场景进行说明 首先先确定需求 需要通过传入的支付方式代码确定是支付宝支付还是微信支付,所以我们先抽象出一个支付类
抽象一个支付对象(也可以是接口)
abstract class Play {
void setPlay(PlayType type, String money) {}
}
枚举支付类型
enum PlayType {
zhiFuBao, //支付宝
weiXian, //微信
}
微信支付实现类
class WeiXianPlay implements Play {
@override
void setPlay(PlayType type, String money) {
debugPrint('-------------微信$money');
}
}
支付宝支付实现类
class ZhiFuBaoPlay implements Play {
@override
void setPlay(PlayType type, String money) {
debugPrint('-------------支付宝$money');
}
}
管理类
class PlayManger {
PlayManger._();
static PlayManger? _playManger;
static PlayManger get instance => _playManger ??= PlayManger._();
Map<PlayType, Play> map = {};
void add(PlayType type, Play play) {
if (type == PlayType.zhiFuBao) {
map[PlayType.zhiFuBao] = play;
}
if (type == PlayType.weiXian) {
map[PlayType.weiXian] = play;
}
}
void onPlay(PlayType type, String money) {
Play? play = map[type];
play?.setPlay(type, money);
}
}
使用
void main() {
PlayManger playManger = PlayManger.instance;
playManger.add(PlayType.weiXian, WeiXianPlay());
playManger.add(PlayType.zhiFuBao, ZhiFuBaoPlay());
playManger.onPlay(PlayType.zhiFuBao, "99");
}