Существует ли шаблон проектирования «дерево ответственности»? - PullRequest
1 голос
/ 29 февраля 2020

Я довольно новичок в шаблонах проектирования, и я хочу понять, есть ли шаблон проектирования «дерева ответственности», как вариант «цепи ответственности»?

1 Ответ

0 голосов
/ 29 февраля 2020

Да. В дополнение к простой реализации обработчика https://www.dofactory.com/net/chain-of-responsibility-design-pattern

/// <summary>

  /// The 'Handler' abstract class

  /// </summary>

  abstract class Handler

  {
    protected Handler successor;

    public void SetSuccessor(Handler successor)
    {
      this.successor = successor;
    }

    public abstract void HandleRequest(int request);
  }

Вы бы сделали что-то вроде этого https://www.codeproject.com/Articles/20108/Extending-Chain-of-Responsibility-Design-Pattern:

public class IfHandler : Handler<string>
{
    private Case1Handler case1Handler;
    private Case2Handler case2Handler;

    public IfHandler(Case1Handler case1, Case2Handler case2)
    {
        case1Handler = case1;
        case2Handler = case2;
    }
    public override bool MustExecuteHandleActions(string request)
    {
        return false;
    }
    public override void PassRequestToNextHandlers(string request)
    {
        if (request != null)
            case1Handler.Handle(request);
        else
            case2Handler.Handle(request);
    }
}
...