我居然连一月一随笔都没有,啊啊啊,忙死个人
这个随笔主要是记录基于自己学习[美]james w.cooper著的《c# design patterns : a tutorial》一书中常用设计模式的整理,既是自己整理的,
便不会与书中所讲完全相同,且避免不了存在不足的地方,欢迎分享宝贵见解。随笔中会穿插书中语句,侵告删。
behavioral pattern 行为型模式
行为型模式模式主要与对象间的通信有关。
chain of responsibility(职责链模式),职责链模式减少对象间的耦合。整理了一个接口,如下:
/// <summary> /// 职责链模式 /// 职责链减少了类之间的耦合 /// </summary> /// <typeparam name="t"></typeparam> public interface ichain<t> { // ichain<t> nextchain { get; set; } /// <summary> /// 添加一条链至本链后 /// </summary> /// <param name="nextchain"></param> void addnext(ichain<t> nextchain); /// <summary> /// 消息处理 /// </summary> /// <param name="msg"></param> void onchain(t msg); // void sendtonext(t msg); // bool hasnext(); }
实现方式:实现了接口的链对象one by one 链接,直到最后一个链,如果链首对象不能处理消息,则将消息传递给下一个链对象,链尾对象提供默认处理方式或是将消息丢弃。
ichain<t> _prior, _inferior, _default; // 多个实现了接口的对象,其中最_default对象位于链的末端,处理所有消息或丢弃。
_prior.addnext(_inferior); // 位于链首的对像先先对消息进行处理
_inferior.addnext(_default);
_prior.onchain(t msg); // 将消息给链首对象进行处理
void ichain<t>.onchain(t msg)
{
if (_prior can't handle this msg)
{
if (_prior.hasnext()) // 即_prior.nextchain != null
{
_prior.sendtonext(msg); // 即_prior.nextchain.onchain(msg); 实现消息在链间的传递
}
else // 假设此时在链尾对象,进行默认的操作
{
throw new methodaccessexception("no one to handle the msg");
}
}
else
{
// handle the msg
}
} // 下次还是先在vs码好....
我在用的时候只添加了两个接口方法,原因在于将注释部分都实现后,在外部可以手动执行链,这在我看来与职责链模式的对象"自治"相悖,
以及只包含两个接口方法相对简洁。但无疑的是都实现后,易读/易用性更强。
如对本文有疑问, 点击进行留言回复!!
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
FlowableException: Error initialising dmn data model报错问题
网友评论