-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAbstract Factory.cs
74 lines (61 loc) · 1.83 KB
/
Abstract Factory.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Abstract Factory - Permite criar famílias de objetos relacionados sem especificar suas classes concretas.
// Interfaces para os produtos
public interface IProdutoA
{
void ExibirDetalhes();
}
public interface IProdutoB
{
void ExibirDetalhes();
}
// Implementações concretas dos produtos
public class ProdutoA1 : IProdutoA
{
public void ExibirDetalhes() => Console.WriteLine("Produto A1 criado");
}
public class ProdutoB1 : IProdutoB
{
public void ExibirDetalhes() => Console.WriteLine("Produto B1 criado");
}
public class ProdutoA2 : IProdutoA
{
public void ExibirDetalhes() => Console.WriteLine("Produto A2 criado");
}
public class ProdutoB2 : IProdutoB
{
public void ExibirDetalhes() => Console.WriteLine("Produto B2 criado");
}
// Interface da fábrica abstrata
public interface IFabricaAbstrata
{
IProdutoA CriarProdutoA();
IProdutoB CriarProdutoB();
}
// Implementações concretas das fábricas
public class FabricaConcreta1 : IFabricaAbstrata
{
public IProdutoA CriarProdutoA() => new ProdutoA1();
public IProdutoB CriarProdutoB() => new ProdutoB1();
}
public class FabricaConcreta2 : IFabricaAbstrata
{
public IProdutoA CriarProdutoA() => new ProdutoA2();
public IProdutoB CriarProdutoB() => new ProdutoB2();
}
// Uso do Abstract Factory
class Program
{
static void Main()
{
IFabricaAbstrata fabrica1 = new FabricaConcreta1();
IProdutoA produtoA1 = fabrica1.CriarProdutoA();
IProdutoB produtoB1 = fabrica1.CriarProdutoB();
produtoA1.ExibirDetalhes();
produtoB1.ExibirDetalhes();
IFabricaAbstrata fabrica2 = new FabricaConcreta2();
IProdutoA produtoA2 = fabrica2.CriarProdutoA();
IProdutoB produtoB2 = fabrica2.CriarProdutoB();
produtoA2.ExibirDetalhes();
produtoB2.ExibirDetalhes();
}
}