A Façade, vagy magyarul homlokzat szerkezeti minta tipikusan az a minta, amit mindenki használt már életében, csak nem tudta, hogy ez egy minta.
Ennek a mintának a lényege, hogy több osztályt fogunk egybe egy új osztályon keresztül. Ezáltal leegyszerűsítjük a kezelését egy komplex rendszernek úgy, hogy a rendszer bonyolult, vagy nehezen érthető, törékeny összefüggéseit elrejtjük a végfelhasználó elől.
Ha leegyszerűsítem, akkor eddig minden példaprogram a Façade mintát mutatta be, mert a statikus Program osztály Main metódusa minden esetben több objektumot használt fel egy rendszer megvalósításához.
Az alábbi példa egy picivel komplikáltabban mutatja be a Façade mintát:
internal class System1
{
public string DoSomething()
{
return "DoSomething() called";
}
}
internal class System2
{
public int Multiply(int a, int b)
{
return a * b;
}
}
public class Facade
{
private System1 _system1;
private System2 _system2;
public Facade()
{
_system1 = new System1();
_system2 = new System2();
}
public void Run()
{
Console.WriteLine(_system1.DoSomething());
Console.WriteLine("5 * 9 = {0}", _system2.Multiply(5, 9));
}
}
A kódban a Facade osztály valósítja meg a mintát. A két alrendszer, System1 és System2 életciklusa megegyezik a központi Facade életciklusával, de ez nem szükségszerű, hogy így legyen.
Az „elrejteni” kívánt alrendszerek láthatóságát érdemes internal-ra tenni, ha egy osztálykönyvtárban tervezzük publikálni a kódunkat.
A Facade minta nem definiálja, hogy az alrendszerek között valamilyen hierarchiának kellene lennie, illetve az adatáramlás irányát sem specifikálja. Ebből adódóan az alrendszerek közötti kommunikáció történhet direkt módon is, vagy a Facade-on keresztül is.
Előnyök
- Komplex alrendszerek elrejtésére, izolálására ad lehetőséget
Hátrányok
- A Façade könnyen válhat God objektummá, aminek a szoftver minden részére is kihatása van.