Concettualmente ad una classe è associato il suo successore o in breve chi gestirà il dato o i dati dopo di lui, in questo modo se la classe A non sa ( e non che non può ) gestire e di contro lo demanda a B..
e via così.
Verosimilmente è raro che venga implementato... anche perchè in molti casi risolve parecchie beghe.
Una mia supposizione è che volendo si possa implementare un buon ragionamento su come gestire i Successori.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestChain { class Program { static void Main(string[] args) { // Setup Chain of Responsibility idealWorker w1 = new Worker(); idealWorker w2 = new CheafofWorker(); idealWorker w3 = new SomeONE(); w1.SetNext(w2); w2.SetNext(w3); for (int i = 0; i < 40; i++) { w1.IDoMyWork(i); } Console.ReadLine(); } } public abstract class idealWorker { protected idealWorker successor; public void SetNext(idealWorker bw) { successor = bw; } public abstract void IDoMyWork(int Range); } public class Worker : idealWorker { public override void IDoMyWork(int Range) { if ((Range > 0) && (Range < 10)) { Console.WriteLine("I'M a Worker and I'll work for :" + Range.ToString()); } else { if (successor != null) successor.IDoMyWork(Range); } } } public class CheafofWorker : idealWorker { public override void IDoMyWork(int Range) { if ((Range >= 10) && (Range < 20)) { Console.WriteLine("I'M a Cheaf and I'll work for :" + Range.ToString()); } else { if (successor != null) successor.IDoMyWork(Range); } } } public class SomeONE : idealWorker { public override void IDoMyWork(int Range) { if ((Range >= 20)) { Console.WriteLine("I'M NoOne... "); } else { if (successor != null) successor.IDoMyWork(Range); } } } }
Ed ecco il codice.. facile facile, con un filo di ironia.
tutto nasce da idealWorker ( che di contro non fa nulla demanda ) ai suoi successori... magari domani tiro fuori un esempio più edificante.
Nessun commento:
Posta un commento