来不及解释了,直接开车
public class ChainOfResponsibilityExample1 : MonoBehaviour
{
private GameObject prefab;
void Start ( )
{
//设置职责链
Approver larry = new Director();
Approver sam = new VicePresident();
Approver tammy = new President();
//larry->sam->tammy
larry.SetSuccessor(sam);
sam.SetSuccessor(tammy);
//发布任务
Purchase p = new Purchase(2034, 350.00, "Project X");
larry.ProcessRequest(p);
p = new Purchase(2035, 32590.10, "Project Y");
larry.ProcessRequest(p);
p = new Purchase(2036, 122100.00, "Project Z");
larry.ProcessRequest(p);
}
}
/// <summary>
/// The 'Handler' abstract class
/// </summary>
abstract class Approver
{
protected Approver successor;//继承人
public void SetSuccessor(Approver successor)
{
this.successor = successor;
}
public abstract void ProcessRequest(Purchase purchase);//处理请求
}
/// <summary>
/// 主管
/// </summary>
class Director : Approver
{
public override void ProcessRequest(Purchase purchase)
{
if (purchase.Amount < 10000.0)
{
Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
}
else if (successor != null)
{
Debug.Log(this.GetType().Name + ":" + purchase.Purpose + "需要副总裁做决定");
successor.ProcessRequest(purchase);
}
}
}
/// <summary>
/// VP
/// </summary>
class VicePresident : Approver
{
public override void ProcessRequest(Purchase purchase)
{
if (purchase.Amount < 25000.0)
{
Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
}
else if (successor != null)
{
Debug.Log(this.GetType().Name + ":"+purchase.Purpose+"需要总裁做决定");
successor.ProcessRequest(purchase);
}
}
}
/// <summary>
/// CEO
/// </summary>
class President : Approver
{
public override void ProcessRequest(Purchase purchase)
{
if (purchase.Amount < 100000.0)
{
Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
}
else
{
Debug.Log(purchase.Purpose+ "需要所有人开个会!");
}
}
}
/// <summary>
/// Class holding request details
/// </summary>
class Purchase
{
private int _price;
private double _amount;
private string _purpose;
// Constructor
public Purchase(int price, double amount, string purpose)
{
this._price = price;
this._amount = amount;
this._purpose = purpose;
}
// Gets or sets purchase number
public int Price
{
get { return _price; }
set { _price = value; }
}
// Gets or sets purchase amount
public double Amount
{
get { return _amount; }
set { _amount = value; }
}
// Gets or sets purchase purpose
public string Purpose
{
get { return _purpose; }
set { _purpose = value; }
}
}