프로그래밍/GoF

[구조 패턴] - 파사드(Facade)

MAKGA 2022. 1. 11. 21:53
320x100

구조

#pragma once

#include <iostream>

class ClassA
{
public:
    void Operate()
    {
        std::cout << "Operating ClassA" << std::endl;
    }
};

class ClassB
{
public:
    void Operate()
    {
        std::cout << "Operating ClassB" << std::endl;
    }
};

class ClassC
{
public:
    void Operate()
    {
        std::cout << "Operating ClassC" << std::endl;
    }
};

class Facade
{
public:
    Facade(ClassA* classA, ClassB* classB, ClassC* classC)
    {
        classA_ = classA;
        classB_ = classB;
        classC_ = classC;
    }

    void OperateClassA()
    {
        classA_->Operate();
    }

    void OperateClassB()
    {
        classB_->Operate();
    }

    void OperateClassC()
    {
        classC_->Operate();
    }

private:
    ClassA* classA_;
    ClassB* classB_;
    ClassC* classC_;
};

 

사용

int main()
{
    ClassA* classA = new ClassA;
    ClassB* classB = new ClassB;
    ClassC* classC = new ClassC;

    Facade* facade = new Facade(classA, classB, classC);

    facade->OperateClassA();
    facade->OperateClassB();
    facade->OperateClassC();

    return 0;
}

 

파사드 객체는 클라이언트를 대신하여 객체들과 상호 작용하며, 객체들을 통합시킨 간략한 인터페이스를 클라이언트에게 제공한다.
클라이언트가 내부 구조에 의존하지 않고 파사드 객체를 통해 객체 구조를 제어할 수가 있어 코드의 유연성이 향상된다.

320x100