Skip to main content

[Design Pattern] 구조 패턴 3. 퍼사드 (Facade)




퍼사드 (Facade) #

퍼사드

  • 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공한다.
  • 서브시스템을 사용하기 쉽도록 상위 수준의 인터페이스를 정의하는 것이다.
  • 특징
    • 복잡한 하위 시스템에 단순화된 인터페이스를 제공한다.
    • 모든 클래스에 결합된 전지전능한 객체가 될 수 있다는 위험성이 있다.



개념적인 예시 #

public class Facade
{
    protected Subsystem1 _subsystem1;
    protected Subsystem2 _subsystem2;

    public Facade(Subsystem1 subsystem1, Subsystem2 subsystem2)
    {
        this._subsystem1 = subsystem1;
        this._subsystem2 = subsystem2;
    }
    
    public string Operation()
    {
        string result = "Facade initializes subsystems:\n";
        result += this._subsystem1.operation1();
        result += this._subsystem2.operation1();
        
        result += "Facade orders subsystems to perform the action:\n";
        result += this._subsystem1.operationN();
        result += this._subsystem2.operationZ();
        
        return result;
    }
}

// 서브 시스템들
public class Subsystem1
{
    public string operation1()
    {
        return "Subsystem1: Ready!\n";
    }

    public string operationN()
    {
        return "Subsystem1: Go!\n";
    }
}

public class Subsystem2
{
    public string operation1()
    {
        return "Subsystem2: Get ready!\n";
    }

    public string operationZ()
    {
        return "Subsystem2: Fire!\n";
    }
}


class Client
{
    public static void ClientCode(Facade facade)
    {
        Console.Write(facade.Operation());
    }
}

class Program
{
    static void Main(string[] args)
    {
        Subsystem1 subsystem1 = new Subsystem1();
        Subsystem2 subsystem2 = new Subsystem2();
        
        Facade facade = new Facade(subsystem1, subsystem2);
        
        // 클라이언트는 퍼사드만 알면 서브시스템을 손쉽게 사용할 수 있다. 
        Client.ClientCode(facade);
    }
}



References #