责任链模式的目的是: 为每个对象确定一个职责,并减少每个对象的职责。
实例代码:
class Project
{
private int number; //项目编号
private double amount; //预算
private string purpose; //说明
public Project(int number, double amount, string purpose)
{
this.number = number;
this.amount = amount;
this.purpose = purpose;
}
public double Amount
{
get { return amount; }
set { amount = value; }
}
public string Purpose
{
get { return purpose; }
set { purpose = value; }
}
public int Number
{
get { return number; }
set { number = value; }
}
}
abstract class Approver
{
protected string name;
protected double confine;
protected Approver successor;
protected Approver(string name,double confine)
{
this.name = name;
this.confine = confine;
}
public void SetSuccessor(Approver successor)
{
this.successor = successor;
}
public abstract void ProcessRequest(Project project);
}
class Director : Approver
{
public Director(string name, double confine)
:base(name,confine)
{
}
public override void ProcessRequest(Project project)
{
if (project.Amount < this.confine)
{
Console.WriteLine("{0} 批准了# {1}号项目", this.name, project.Number);
}
else if (successor != null)
{
successor.ProcessRequest(project);
}
else
{
Console.WriteLine("{0} 无法批准# {1}号项目", this.name, project.Number);
}
}
}
class MainApp
{
static void Main()
{
Approver director1 = new Director("director1", 100F);
Approver director2 = new Director("director2", 1000F);
Approver director3 = new Director("director3", 5000F);
director1.SetSuccessor(director2);
director2.SetSuccessor(director3);
Project p = new Project(1008, 350.00, "技术支持");
director1.ProcessRequest(p);
p = new Project(2008, 3500.10, "采购***");
director1.ProcessRequest(p);
p = new Project(3008, 20000.50, "大型系统采购");
director1.ProcessRequest(p);
Console.Read();
}
}
实例代码:
class Project
{
private int number; //项目编号
private double amount; //预算
private string purpose; //说明
public Project(int number, double amount, string purpose)
{
this.number = number;
this.amount = amount;
this.purpose = purpose;
}
public double Amount
{
get { return amount; }
set { amount = value; }
}
public string Purpose
{
get { return purpose; }
set { purpose = value; }
}
public int Number
{
get { return number; }
set { number = value; }
}
}
abstract class Approver
{
protected string name;
protected double confine;
protected Approver successor;
protected Approver(string name,double confine)
{
this.name = name;
this.confine = confine;
}
public void SetSuccessor(Approver successor)
{
this.successor = successor;
}
public abstract void ProcessRequest(Project project);
}
class Director : Approver
{
public Director(string name, double confine)
:base(name,confine)
{
}
public override void ProcessRequest(Project project)
{
if (project.Amount < this.confine)
{
Console.WriteLine("{0} 批准了# {1}号项目", this.name, project.Number);
}
else if (successor != null)
{
successor.ProcessRequest(project);
}
else
{
Console.WriteLine("{0} 无法批准# {1}号项目", this.name, project.Number);
}
}
}
class MainApp
{
static void Main()
{
Approver director1 = new Director("director1", 100F);
Approver director2 = new Director("director2", 1000F);
Approver director3 = new Director("director3", 5000F);
director1.SetSuccessor(director2);
director2.SetSuccessor(director3);
Project p = new Project(1008, 350.00, "技术支持");
director1.ProcessRequest(p);
p = new Project(2008, 3500.10, "采购***");
director1.ProcessRequest(p);
p = new Project(3008, 20000.50, "大型系统采购");
director1.ProcessRequest(p);
Console.Read();
}
}


浙公网安备 33010602011771号