定义:职责链模式(Chain OfResponsibility Pattern),使从个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理安为止。
类型:行为型模式。
概述:
职责链模式,行为型模式,说明其主要是通过行为来表现的。这里的行为,也可以理解为方法(Method)。职责链模式,将一堆处理事件的行为对象抽象为一个个的类。有些类似链表结构,每个类中都有一个指针,指向它的下一个类。这样,当一个类处理完它要处理的事情之后,就将工作将给下一个类来处理。如果下一个类发现它暂时无事可做,它依然将职责转到下一个类去处理。
职责链模式,好将每一个职责抽象成一个类。然后处理某件事,会有一系列的职责者,这样就抽象出一系列的职责。然后用指针,像链表一样,将它们链起来,就形成了职责链模式了。
一系列的职责,抽象出相同的接口,以及一个指针形成抽象类作为这一系列职责类的抽象基类。
例如,生产线的工人。每个人,针对生产产品的职责,去完成自己的职责,完成之后,就可以交给生产线上的下一位员工。有些生产线,对员工职责的顺序有要求,有些生产线没有要求。
类图:
参与者:
示例代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Design14
{
// 抽象接口
abstract class Worker
{
public Worker worker;
public abstract void DoHandler();
}
class Installer : Worker
{
public Installer(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成产品的基本组装");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
class Packer : Worker
{
public Packer(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成产品的打包");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
class QC : Worker
{
public QC(Worker _worker)
{
this.worker = _worker;
}
public override void DoHandler()
{
Console.WriteLine("完成产品的质检");
if (null != this.worker)
{
this.worker.DoHandler();
}
}
}
// Client
class Program
{
static void Main(string[] args)
{
// 完成职责链的构建
Worker qc = new QC(null);
Worker packer = new Packer(qc);
Worker installer = new Installer(packer);
// 开户执行职责
installer.DoHandler();
}
}
}
适用性:
注意:
优缺点:
参考资料:
原文:http://blog.csdn.net/feihe0755/article/details/18657049