Csharp/C Sharp/Design Patterns/Chain Pattern

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Chain of Responsibility Pattern

 
using System;
public abstract class Chain {
    protected Chain theNextInChain;
    public abstract void DealWithRequirement(string requirement);
    public void NextInChain(Chain next) {
        this.theNextInChain = next;
    }
}
public class Employee : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {
            case "Job":
                Console.WriteLine("{0} Staff", this);
                break;
            default:
                if (theNextInChain != null)
                    theNextInChain.DealWithRequirement(requirement);
                break;
        }
    }
}

public class Manager : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {
            case "Manager":
                Console.WriteLine("{0} requirement.", this);
                break;
            default:
                if (theNextInChain != null)
                    theNextInChain.DealWithRequirement(requirement);
                break;
        }
    }
}

public class Senior : Chain {
    public override void DealWithRequirement(string requirement) {
        switch (requirement) {
            default: Console.WriteLine("{0} has managed the " + requirement + " requirement.", this);
                break;
        }
    }
    public Senior() { ;}
}
class Client {
    static void Main(string[] args) {
        Chain staff = new Employee();
        Chain manager = new Manager();
        Chain seniorManager = new Senior();
        staff.NextInChain(manager);
        manager.NextInChain(seniorManager);
        staff.DealWithRequirement("Corporates");
        staff.DealWithRequirement("Job");
        staff.DealWithRequirement("Manager");
        staff.DealWithRequirement("Agency");
    }
}