Software Architecture/Software design(22)
-
Mediator pattern
Mediator는 여러 concrete item들을 가지고 있는 class입니다. 여러 concreate item 중 하나에서 어떤 event가 발생하여 다른 concreate item의 변화를 요청하고자 할때, 직접 요청하지 않고, base class인 Widget의 onChanged를 호출하여 Mediator에게 어떠한 변화가 있었는지를 알려줍니다. Mediator는 변화에 대한 callback인 onChanged의 호출을 받으면, 여기서 어떤 변화인지 파악합니다. 이후 변화에 대응할 수 있는 item을 골라서 해당 item이 해야 할 일을 수행합니다. 즉, mediator pattern은 누군가 전달하는 event를 받아 적절히 처리한 후 되돌려 주는 pattern 입니다.
2022.02.28 -
Iterator pattern
Iterator pattern 어떤 Item이 있고 item들을 담고 있는 menu가 있다고 가정해보겠습니다. menu 내 item들을 모두 순회하고자 한다면, 다음과 같이 구현되어야 합니다. class Menu { public: uint32 getCost(); }; class ItelianMenu : public Menu { ... uint32 getCost() { return m_cost; } ... }; auto menu = std::make_shared(std::shared_ptr); menu.push_back(std::make_shared()); menu.push_back(std::make_shared()); ... for (auto i = 0; i < menu.size(); ++i) { aut..
2022.02.28 -
Interpret pattern
decorator, proxy와 거의 같은 구조입니다. 그리고 container를 제외하고는 composite pattern과도 동일한 구조입니다. interpret pattern은 하나의 concrete class에서 'interpret'이라는 연산을 수행하여 동작을 완결할 수도 있고, 혹은 다른 concrete class들을 사용하여 연산을 수행해야 하는 경우도 지원합니다. 위 그림에서 NonTerminalExpression의 경우 동류의 다른 expression class를 가지고 자신의 interpret 연산을 수행하는데 사용합니다. client는 각각 서로 다른 expression에 대해 하나의 expression이 다른 expression를 사용해야 한다면, 다른 expression을 해당 e..
2022.02.28 -
Flyweight pattern
flyweight pattern 자주 생성/소멸을 반복하면서 사용해야 하는 경우, 객체의 생성/소멸 cost를 없애기 위해서 이를 caching 해 놓을 수 있습니다. Flyweight pattern은 바로 이 caching을 하는 pattern이며, 객체의 생성 대신 caching 된 객체에 대한 reference를 전달하는 생성패턴 입니다. 객체를 언제 삭제할지, reference를 몇 개나 유지할 수 있게 허용할지 등 상세한 제어를 수행하는 로직을 추가할 수 있습니다.
2022.02.28 -
Factory method
객체가 있을 때 객체가 '자신이 필요한' 것들을 스스로 생성하여 조립한 후 제공하는 pattern 입니다. specific한 생성 부분을 subclassing 한 후, concrete class의 입맛에 맞는 객체들을 직접 생성하여 상위 class에서 조립한 후, 이를 사용하는 client class에게 제공합니다. 간단하게 생성에 대한 부분을 sub classing 하면서 확장 해 나가는 pattern 이 됩니다. 위 example에서 MazeGame이 생성되어 있을 시, client는 단순히 해당 class에 makeMaze()를 호출합니다. 어떤 maze를 어떻게 생성할지에 대해 client는 신경쓰지 않아도 됩니다. '구체적인' 생성에 대한 로직은 모두 concrete class에 위임되기 때문입..
2022.02.28 -
Facade pattern
Facade pattern Think about that we have several features such as Scanning, Parsing, and building node from program code. And each of them provides its own interface that can be used for activating their own feature. But, the client does not want to know and control each of interfaces, but just want to use aggregated interface that can be used as simple gateway interface controlling whole the oth..
2022.02.28