C# Design Pattern: Chain of Responsibility (Portugues)

O padrão Chain of Responsibility (Cadeia de Responsabilidade) é usado para passar uma solicitação ao longo de uma cadeia de manipuladores. Cada manipulador decide se trata a solicitação ou se a passa adiante. É útil quando você tem várias etapas ou res…


This content originally appeared on DEV Community and was authored by Juarez Júnior

O padrão Chain of Responsibility (Cadeia de Responsabilidade) é usado para passar uma solicitação ao longo de uma cadeia de manipuladores. Cada manipulador decide se trata a solicitação ou se a passa adiante. É útil quando você tem várias etapas ou responsabilidades que podem processar uma solicitação, como em um sistema de aprovação de despesas, onde diferentes níveis de gerentes podem aprovar diferentes valores.

Exemplo de Código em C#:



// Classe base para manipuladores
public abstract class Aprovador
{
    protected Aprovador _sucessor;

    public void DefinirSucessor(Aprovador sucessor)
    {
        _sucessor = sucessor;
    }

    public abstract void ProcessarPedido(int valor);
}

// Aprovador nível baixo (pode aprovar até 1000)
public class Gerente : Aprovador
{
    public override void ProcessarPedido(int valor)
    {
        if (valor <= 1000)
        {
            Console.WriteLine($"Gerente aprovou a solicitação de {valor} reais.");
        }
        else if (_sucessor != null)
        {
            _sucessor.ProcessarPedido(valor);
        }
    }
}

// Aprovador nível médio (pode aprovar até 5000)
public class Diretor : Aprovador
{
    public override void ProcessarPedido(int valor)
    {
        if (valor <= 5000)
        {
            Console.WriteLine($"Diretor aprovou a solicitação de {valor} reais.");
        }
        else if (_sucessor != null)
        {
            _sucessor.ProcessarPedido(valor);
        }
    }
}

// Aprovador nível alto (pode aprovar qualquer valor)
public class Presidente : Aprovador
{
    public override void ProcessarPedido(int valor)
    {
        Console.WriteLine($"Presidente aprovou a solicitação de {valor} reais.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criando a cadeia de responsabilidade
        Aprovador gerente = new Gerente();
        Aprovador diretor = new Diretor();
        Aprovador presidente = new Presidente();

        gerente.DefinirSucessor(diretor);
        diretor.DefinirSucessor(presidente);

        // Testando a cadeia com diferentes valores
        gerente.ProcessarPedido(500);   // Gerente aprova
        gerente.ProcessarPedido(3000);  // Diretor aprova
        gerente.ProcessarPedido(10000); // Presidente aprova
    }
}


Explicação do Código:

Neste exemplo, temos três classes de aprovadores: Gerente, Diretor e Presidente. Cada um tem um limite de aprovação. Se o valor for maior do que o limite, a solicitação é passada para o próximo aprovador na cadeia. O Gerente pode aprovar até 1000 reais, o Diretor até 5000, e o Presidente aprova qualquer valor.

Conclusão:

O padrão Chain of Responsibility permite que diferentes objetos tentem processar uma solicitação. Ele é útil para sistemas onde várias etapas ou níveis hierárquicos precisam processar pedidos ou tomar decisões. A solicitação é passada até que alguém possa lidar com ela.

Código fonte: GitHub


This content originally appeared on DEV Community and was authored by Juarez Júnior


Print Share Comment Cite Upload Translate Updates
APA

Juarez Júnior | Sciencx (2024-10-06T12:00:00+00:00) C# Design Pattern: Chain of Responsibility (Portugues). Retrieved from https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/

MLA
" » C# Design Pattern: Chain of Responsibility (Portugues)." Juarez Júnior | Sciencx - Sunday October 6, 2024, https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/
HARVARD
Juarez Júnior | Sciencx Sunday October 6, 2024 » C# Design Pattern: Chain of Responsibility (Portugues)., viewed ,<https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/>
VANCOUVER
Juarez Júnior | Sciencx - » C# Design Pattern: Chain of Responsibility (Portugues). [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/
CHICAGO
" » C# Design Pattern: Chain of Responsibility (Portugues)." Juarez Júnior | Sciencx - Accessed . https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/
IEEE
" » C# Design Pattern: Chain of Responsibility (Portugues)." Juarez Júnior | Sciencx [Online]. Available: https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/. [Accessed: ]
rf:citation
» C# Design Pattern: Chain of Responsibility (Portugues) | Juarez Júnior | Sciencx | https://www.scien.cx/2024/10/06/c-design-pattern-chain-of-responsibility-portugues/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.