Skip to content

Commit fc1ccce

Browse files
Update Patterns Comportamentais
Adicionando padrões comportamentais: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento.
1 parent f66219d commit fc1ccce

7 files changed

+406
-0
lines changed

ChainofResponsibility.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Chain of Responsibility - Permite que uma solicitação seja processada por uma sequência de manipuladores.
2+
public abstract class Manipulador
3+
{
4+
protected Manipulador proximoManipulador;
5+
6+
public void SetProximoManipulador(Manipulador manipulador)
7+
{
8+
this.proximoManipulador = manipulador;
9+
}
10+
11+
public abstract void Processar(int valor);
12+
}
13+
14+
public class ManipuladorA : Manipulador
15+
{
16+
public override void Processar(int valor)
17+
{
18+
if (valor < 10)
19+
{
20+
Console.WriteLine($"Manipulador A processou: {valor}");
21+
}
22+
else if (proximoManipulador != null)
23+
{
24+
proximoManipulador.Processar(valor);
25+
}
26+
}
27+
}
28+
29+
public class ManipuladorB : Manipulador
30+
{
31+
public override void Processar(int valor)
32+
{
33+
if (valor >= 10 && valor < 20)
34+
{
35+
Console.WriteLine($"Manipulador B processou: {valor}");
36+
}
37+
else if (proximoManipulador != null)
38+
{
39+
proximoManipulador.Processar(valor);
40+
}
41+
}
42+
}
43+
44+
public class Program
45+
{
46+
static void Main()
47+
{
48+
ManipuladorA a = new ManipuladorA();
49+
ManipuladorB b = new ManipuladorB();
50+
51+
a.SetProximoManipulador(b);
52+
53+
a.Processar(5); // Manipulador A processou: 5
54+
a.Processar(15); // Manipulador B processou: 15
55+
}
56+
}

CommandPattern

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Command - Encapsula uma solicitação como um objeto, permitindo o armazenamento e execução posterior.
2+
public interface ICommand
3+
{
4+
void Executar();
5+
}
6+
7+
public class ComandoLigar : ICommand
8+
{
9+
public void Executar()
10+
{
11+
Console.WriteLine("Ligar o dispositivo.");
12+
}
13+
}
14+
15+
public class ComandoDesligar : ICommand
16+
{
17+
public void Executar()
18+
{
19+
Console.WriteLine("Desligar o dispositivo.");
20+
}
21+
}
22+
23+
public class Controlador
24+
{
25+
private ICommand comando;
26+
27+
public void SetComando(ICommand comando)
28+
{
29+
this.comando = comando;
30+
}
31+
32+
public void PressionarBotao()
33+
{
34+
comando.Executar();
35+
}
36+
}
37+
38+
public class Program
39+
{
40+
static void Main()
41+
{
42+
Controlador controlador = new Controlador();
43+
controlador.SetComando(new ComandoLigar());
44+
controlador.PressionarBotao(); // Ligar o dispositivo.
45+
46+
controlador.SetComando(new ComandoDesligar());
47+
controlador.PressionarBotao(); // Desligar o dispositivo.
48+
}
49+
}

CommandPattern.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Command - Encapsula uma solicitação como um objeto, permitindo o armazenamento e execução posterior.
2+
public interface ICommand
3+
{
4+
void Executar();
5+
}
6+
7+
public class ComandoLigar : ICommand
8+
{
9+
public void Executar()
10+
{
11+
Console.WriteLine("Ligar o dispositivo.");
12+
}
13+
}
14+
15+
public class ComandoDesligar : ICommand
16+
{
17+
public void Executar()
18+
{
19+
Console.WriteLine("Desligar o dispositivo.");
20+
}
21+
}
22+
23+
public class Controlador
24+
{
25+
private ICommand comando;
26+
27+
public void SetComando(ICommand comando)
28+
{
29+
this.comando = comando;
30+
}
31+
32+
public void PressionarBotao()
33+
{
34+
comando.Executar();
35+
}
36+
}
37+
38+
public class Program
39+
{
40+
static void Main()
41+
{
42+
Controlador controlador = new Controlador();
43+
controlador.SetComando(new ComandoLigar());
44+
controlador.PressionarBotao(); // Ligar o dispositivo.
45+
46+
controlador.SetComando(new ComandoDesligar());
47+
controlador.PressionarBotao(); // Desligar o dispositivo.
48+
}
49+
}

IteratorPattern.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Iterator - Fornece uma maneira de acessar sequencialmente os elementos de uma coleção sem expor sua estrutura subjacente.
2+
public interface IIterador<T>
3+
{
4+
bool TemProximo();
5+
T Proximo();
6+
}
7+
8+
public class Colecao<T>
9+
{
10+
private List<T> itens = new List<T>();
11+
12+
public void Adicionar(T item)
13+
{
14+
itens.Add(item);
15+
}
16+
17+
public IIterador<T> CriarIterador()
18+
{
19+
return new Iterador<T>(itens);
20+
}
21+
}
22+
23+
public class Iterador<T> : IIterador<T>
24+
{
25+
private List<T> colecao;
26+
private int posicao = 0;
27+
28+
public Iterador(List<T> colecao)
29+
{
30+
this.colecao = colecao;
31+
}
32+
33+
public bool TemProximo()
34+
{
35+
return posicao < colecao.Count;
36+
}
37+
38+
public T Proximo()
39+
{
40+
return colecao[posicao++];
41+
}
42+
}
43+
44+
public class Program
45+
{
46+
static void Main()
47+
{
48+
Colecao<int> colecao = new Colecao<int>();
49+
colecao.Adicionar(1);
50+
colecao.Adicionar(2);
51+
colecao.Adicionar(3);
52+
53+
IIterador<int> iterador = colecao.CriarIterador();
54+
while (iterador.TemProximo())
55+
{
56+
Console.WriteLine(iterador.Proximo());
57+
}
58+
}
59+
}
60+

MediatorPattern.cs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Mediator - Define um objeto que centraliza a comunicação entre outros objetos para reduzir dependências.
2+
public interface IMediador
3+
{
4+
void EnviarMensagem(string mensagem, Colaborador colaborador);
5+
}
6+
7+
public class MediadorConcreto : IMediador
8+
{
9+
private ColaboradorA colaboradorA;
10+
private ColaboradorB colaboradorB;
11+
12+
public MediadorConcreto(ColaboradorA colaboradorA, ColaboradorB colaboradorB)
13+
{
14+
this.colaboradorA = colaboradorA;
15+
this.colaboradorB = colaboradorB;
16+
}
17+
18+
public void EnviarMensagem(string mensagem, Colaborador colaborador)
19+
{
20+
if (colaborador == colaboradorA)
21+
{
22+
colaboradorB.ReceberMensagem(mensagem);
23+
}
24+
else
25+
{
26+
colaboradorA.ReceberMensagem(mensagem);
27+
}
28+
}
29+
}
30+
31+
public abstract class Colaborador
32+
{
33+
protected IMediador mediador;
34+
35+
public Colaborador(IMediador mediador)
36+
{
37+
this.mediador = mediador;
38+
}
39+
40+
public abstract void EnviarMensagem(string mensagem);
41+
public abstract void ReceberMensagem(string mensagem);
42+
}
43+
44+
public class ColaboradorA : Colaborador
45+
{
46+
public ColaboradorA(IMediador mediador) : base(mediador) { }
47+
48+
public override void EnviarMensagem(string mensagem)
49+
{
50+
Console.WriteLine($"Colaborador A enviando: {mensagem}");
51+
mediador.EnviarMensagem(mensagem, this);
52+
}
53+
54+
public override void ReceberMensagem(string mensagem)
55+
{
56+
Console.WriteLine($"Colaborador A recebeu: {mensagem}");
57+
}
58+
}
59+
60+
public class ColaboradorB : Colaborador
61+
{
62+
public ColaboradorB(IMediador mediador) : base(mediador) { }
63+
64+
public override void EnviarMensagem(string mensagem)
65+
{
66+
Console.WriteLine($"Colaborador B enviando: {mensagem}");
67+
mediador.EnviarMensagem(mensagem, this);
68+
}
69+
70+
public override void ReceberMensagem(string mensagem)
71+
{
72+
Console.WriteLine($"Colaborador B recebeu: {mensagem}");
73+
}
74+
}
75+
76+
public class Program
77+
{
78+
static void Main()
79+
{
80+
ColaboradorA colaboradorA = new ColaboradorA(null);
81+
ColaboradorB colaboradorB = new ColaboradorB(null);
82+
83+
IMediador mediador = new MediadorConcreto(colaboradorA, colaboradorB);
84+
85+
colaboradorA.EnviarMensagem("Olá, B!");
86+
colaboradorB.EnviarMensagem("Oi, A!");
87+
}
88+
}

MementoPattern.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Memento - Permite restaurar o estado anterior de um objeto sem expor sua implementação interna.
2+
public class Estado
3+
{
4+
public string Nome { get; set; }
5+
public int Idade { get; set; }
6+
}
7+
8+
public class Memento
9+
{
10+
public Estado EstadoSalvo { get; private set; }
11+
12+
public Memento(Estado estado)
13+
{
14+
EstadoSalvo = new Estado { Nome = estado.Nome, Idade = estado.Idade };
15+
}
16+
}
17+
18+
public class Origem
19+
{
20+
private Estado estado;
21+
22+
public Origem(string nome, int idade)
23+
{
24+
estado = new Estado { Nome = nome, Idade = idade };
25+
}
26+
27+
public Memento SalvarEstado()
28+
{
29+
return new Memento(estado);
30+
}
31+
32+
public void RestaurarEstado(Memento memento)
33+
{
34+
estado = memento.EstadoSalvo;
35+
}
36+
37+
public void MostrarEstado()
38+
{
39+
Console.WriteLine($"Nome: {estado.Nome}, Idade: {estado.Idade}");
40+
}
41+
}
42+
43+
public class Program
44+
{
45+
static void Main()
46+
{
47+
Origem origem = new Origem("Vitor", 30);
48+
origem.MostrarEstado();
49+
50+
Memento memento = origem.SalvarEstado();
51+
52+
origem.RestaurarEstado(memento);
53+
origem.MostrarEstado();
54+
}
55+
}

0 commit comments

Comments
 (0)