본문 바로가기
반응형

designpattern12

[C++]Design Pattern - Composite Pattern Composite Pattern 객체들을 트리구조로 구성하여 부분과 전체를 나 나태는 계층구조로 만들 수 있다. 개별 객체와 복합객체를 구별하지 않고 동일한 방법 다룰 수 있다. 이러한 구조를 흔히 윈도우에서 우클릭을 하면 볼 수 있는 팝업 메뉴를 예로 구현해본다. 구성 : 선택했을때선택했을 때 하위 메뉴를 열어주는 메뉴(PopupMenu), 선택했을 때 어떤 일을 실행하는 메뉴(MenuItem) 설계 : 이 구성을 객체지향으로 설계하면 PopupMenu, MenuItem 클래스로 만들 텐데 PopupMenu에는 하위 항목으로 실행을 위한 MenuItem을 가질 수 있고, 또 다른 하위 메뉴로 PopupMenu를 가질 수도 있다. 이 둘을 모두 담기 위해서는 기반 클래스 BaseMenu가 있어야 하겠다... 2020. 12. 13.
[C++] Design Pattern - Policy Base Design [문제점] 아래의 코드에서 List s 가 멀티스래드에 안전하지 않다고 가정한다. 동기화를 위해서 Lock/Unlock의 구현이 필요하다. 그런데 사용자에 따라 List에 내장된 Lock/Unlock을 원치 않을 수도 있다. 불필요한 Lock/Unlock의 경우 성능 저하가 발생할 수도 있기 때문이다. 그러므로 Lock/Unlock은 사용자가 포함시킬 것인지 포함시키지 않을 것인지 선택 할 수 있어야 하겠다. 1. 변하는 것과 변하지 않는 것을 분리한다. * 변하는 것을 가상함수화하는 방법 -> Template Method * 변하는 것을 별도의 클래스로 구현하는 방법 -> Strategy Pattern 2. Strategy pattern을 이용해서 Lock/Unlock을 구현해보자. #include u.. 2020. 12. 5.
[C++] Design Pattern - Template Method 기법 Template method 기법 - 모든 도형에 공통적으로 변하지 않는 전체적인 흐름을 기반 클래스에서 제공하고 - 각 도형 별로 변해야 하는 부분을 가상 함수로 제공해서 파생 클래스가 재정의 할 수 있게 한다. #include #include using namespace std; class Shape { public: // [문제] 가상의 멀티스래드 세이프에 대한 고려 virtual void Draw() final { // 변하는 것을 가상함수로 뽑아낸다. // -> Lock, Unlock 은 변화하지 않는 코드 // -> 실재 그리기 로직만 변화가 있는 코드이다. -> 이것을 함수로 빼냄 -> DrawImp() cout private 또는 protected virtual Shape* Clone() .. 2020. 11. 25.
[C++] 예제로 배우는 객체 지향(Prototype Pattern) Copy & Paste 기능 추가하기 타입코드를 사용하는 방법 새로운 도형이 추가되면 기존 코드가 수정(추가)된다. OCP를 만족하지 못한다. 가상함수를 사용하는 방법 새로운 도형이 추가 되어도 기존 코드가 수정되지 않는다. OCP를 만족한다. "Prototype"이라 불리는 디자인 패턴 // Exmaples.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include #include using namespace std; class Shape { public: int type; virtual void Draw() { cout 가상함수를 사용하는 방법 /*switch (v[k]->type) { case 1: case 2: case 3: break.. 2020. 11. 25.
반응형