工厂与职责链模式
这周做的一个模块把工厂模式与职责链模式糅合在一起了,工厂模式用来解决通过解析输入的信息返回一个符合的类,职责链模式则负责选取的过程。
工厂模式应该是最简单也可能用的最多的模式,用来根据需要返回特定的类,职责链用于从多个处理类中选取一个合适的类来处理,根据链依次传递,直到正确处理为止,处理完后就沿途返回。
问题定义: 有一大堆的算法,算法是用来处理波形数据的(一个大的数组),每个算法处理器有自己的参数与处理行为,因此为每种算法定义一个处理器,负责参数输入与处理,以及参数载入与输出,用于记住算法处理器的状态,要利用职责链模式,必须定义职责链基类或接口,这里采用基类更合适,因为可以提供一些基础代码,以免每个职责内都写同样的代码。
职责链跟链表类似,每个节点都知道下个节点是什么,至于上个节点是什么,没必要知道,因此定义以下基类,这里只给出接口。
public interface IChain
{
void AddToChain(IChain chain);
void Invoke(....params); //根据需要写参数列表,里面是处理逻辑,参数列表中可多加一个isprocess,
//用于表示是否已经处理了,得到了处理就沿途返回,以免处理了还传递下去
bool HasChain{ get; }
IChain GetChain{ get; }
}
然后使得每个处理器都出继承子IChain接口,然后建立一个工厂类,链接所有处理器,然后从职责链传入需要的参数,就可正确处理了。
使用职责链模式可以减少判断分支结构的使用,if,switch语句。使用工厂模式可以免去该如何从多个可用类型创建需要的类型。
比如对于一个文件,根据文件类型(扩展名)的不同,处理方式就不同,图片,音乐,文本等多种类型,这样就可以为每种类型的处理过程创建一个职责,串成职责链,通过传入文件名,依次在职责链中传递知道正确处理为止。
设计模式应用的好,可以提高代码的可读性和可申缩性,可惜我虽然看了好几遍,能用好的模式也没多少,数的出来,有待加强。