No post Um pattern em C# por dia: Façade - pattern estrutural eu mostrei um exemplo. Aqui vai mais um:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using _50minutos_biblioteca;
using System.Threading;
namespace _50minutos_facade
{
class Program
{
static void Main(string[] args)
{
Sala s = new Sala();
s.Abrir();
Console.WriteLine("------------------------");
Console.WriteLine("a aula está em andamento");
Console.WriteLine(" a g u a r d e . . .");
Console.WriteLine("------------------------");
Thread.Sleep(5000);
s.Fechar();
Console.ReadKey();
}
}
}
//Library
namespace _50minutos_biblioteca
{
//SubsystemA
internal class SalaTreinamento
{
internal void AcenderLuzes()
{
Console.WriteLine("sala de treinamento - luzes acesas");
}
internal void ApagarLuzes()
{
Console.WriteLine("sala de treinamento - luzes apagadas");
}
internal void Abrir()
{
Console.WriteLine("sala de treinamento aberta");
}
internal void Fechar()
{
Console.WriteLine("sala de treinamento fechada");
}
}
//SubsystemB
internal class Projetor
{
internal void Ligar()
{
Console.WriteLine("projetor ligado");
}
internal void Desligar()
{
Console.WriteLine("projetor desligado");
}
}
//SubsystemC
internal class Computador
{
internal void Ligar()
{
Console.WriteLine("computador ligado");
}
internal void Desligar()
{
Console.WriteLine("computador desligado");
}
}
//Facade
public class Sala
{
//SubsystemA
SalaTreinamento s =
new SalaTreinamento();
//SubsystemB
Projetor p =
new Projetor();
//SubsystemC
Computador[] ac =
new Computador[10];
public Sala()
{
for (int i = 0; i < ac.Length; i++)
{
ac[i] = new Computador();
}
}
//Operation1
public void Abrir()
{
s.Abrir();
s.AcenderLuzes();
p.Ligar();
foreach (var item in ac)
{
item.Ligar();
}
}
//Operation2
public void Fechar()
{
foreach (var item in ac)
{
item.Desligar();
}
p.Desligar();
s.ApagarLuzes();
s.Fechar();
}
}
}