Sobes.tech
Junior — Middle

Môžeš uviesť príklad implementácie vzoru Chain of Responsibility v programovacom kóde?

sobes.tech AI

Odpoveď od AI

Vzorec Reťazec zodpovednosti umožňuje odovzdanie požiadavky pozdĺž reťazca spracovateľov, kým ju niektorý z nich ne spracuje.

Príklad v C#:

// Abstraktný spracovateľ
abstract class Handler
{
    protected Handler next;

    public void SetNext(Handler nextHandler) {
        next = nextHandler;
    }

    public virtual void Handle(string request) {
        if (next != null) {
            next.Handle(request);
        }
    }
}

// Konkrétne spracovatelia
class ConcreteHandlerA : Handler
{
    public override void Handle(string request) {
        if (request == "A") {
            Console.WriteLine("Spracované ConcreteHandlerA");
        } else {
            base.Handle(request);
        }
    }
}

class ConcreteHandlerB : Handler
{
    public override void Handle(string request) {
        if (request == "B") {
            Console.WriteLine("Spracované ConcreteHandlerB");
        } else {
            base.Handle(request);
        }
    }
}

// Použitie
var handlerA = new ConcreteHandlerA();
var handlerB = new ConcreteHandlerB();
handlerA.SetNext(handlerB);

handlerA.Handle("B"); // Vytlačí: Spracované ConcreteHandlerB

V tomto príklade je požiadavka odovzdaná pozdĺž reťazca spracovateľov, kým sa nenájde vhodný.