跟我一起学“仓颉”设计模式-职责链模式
本章为大家详细的介绍了仓颉设计模式中职责链模式的内容。
·
目录
一、职责链模式
职责链模式:避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止(行为型)。
职责链角色:
- 抽象处理者:定义一个处理请求的抽象类,不同的具体处理者处理请求的方式不同,因此在它里面定义抽象处理方法;
- 具体处理者:抽象处理者的子类,实现处理不同的请求。
二、实现
在src目录下,新建一个responsibility文件夹,在该文件夹下新建一个responsibility.cj文件和responsibility.drawio文件。
类图

核心代码
package DesignPattern.responsibility
// 业务类
public class Product {
public Product(public let id: String, public let name: String, public let price: Int64) {}
}
// 抽象处理者
public abstract class Approver {
protected var _optApprover = Option<Approver>.None
protected let name: String
public init (name: String) {
this.name = name
}
public func process(product: Product):Unit
public func setApprover(approver: Approver){
this._optApprover = approver
}
}
// 具体处理者
public class Boss <: Approver {
public Boss(name: String) {super(name)}
public func process(product: Product):Unit {
// 大于10万,老板来审核
if (product.price > 100000) {
println("老板: ${this.name} 审批商品单: ${product.id}, 金额: ${product.price}, 采购项目: ${product.name}")
} else {
match (this._optApprover) {
case Some(approver) => approver.process(product)
case None => println("无审核者")
}
}
}
}
// 具体处理者
public class Leader <: Approver {
public Leader(name: String) {super(name)}
public func process(product: Product):Unit {
// 小于10万,主管来审核
if (product.price >= 0 && product.price <= 100000) {
println("主管: ${this.name} 审批商品单: ${product.id}, 金额: ${product.price}, 采购项目: ${product.name}")
}
}
}
测试代码
package DesignPattern
import DesignPattern.responsibility.*
main(): Int64 {
let boss = Boss("蟹老板")
// 设置职责链
boss.setApprover(Leader("海绵宝宝"))
let product1 = Product("1001", "肉饼", 200000)
let product2 = Product("1002", "腌椰菜", 20000)
boss.process(product1)
boss.process(product2)
return 0
}
三、优缺点
优点:
- 职责链模式使得一个对象无需知道是哪一个对象在处理请求,对象只需要知道该请求会被处理即可;
- 请求处理对象仅需要维持一个指向其后者的引用,而不需要维持它对候选处理者的引用,简化对象的连接;
- 新增新的具体请求处理者无需修改源代码,符合开闭原则。
缺点:
- 由于一个请求没有明确接收者,不能保证该请求一定被执行;
- 较长的职责链会影响系统性能;
- 如果设计不得当,会导致循环调用,导致系统陷入死循环。
四、适用环境
- 很多个对象可以处理同一个请求,具体哪个对象处理该请求待运行时在确定;
- 不明确指定接收者的情况下向多个对象中的每一个都提交。
五、小结
本章为大家详细的介绍了仓颉设计模式中职责链模式的内容,下一章,为大家带来职责链模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!
更多推荐
所有评论(0)