DesignPattern

Design Patterns/Creational Patterns

Singleton Pattern (C++)

Sigletone Pattern (C++) 목적 프로그램 내에서 어떤 클래스가 오직 한 개의 인스턴스만 갖도록 보장하고 접근 할 수 있는 인터페이스를 제공한다. 자주 사용되지만 여러 인스턴스가 생성될 필요가 없는 경우 사용된다. (예 dbconnection, networking, config ...) c++에서 쓰레드 안전성을 위해 local static 변수를 활용하여 static Instance() 인터페이스를 구현했다. 전역 변수와 차이가 없어보이나 다음과 같은 이점이 있다. 1. 인스턴스를 인터페이스를 통해 유일하게 접근함. 2. name space를 좁혀줌 그러나 싱글톤을 남용할 경우 클래스간의 결합도가 커지는 문제점이 있다. 사용 시나리오 프로그램 내에서 네트워크에 접속하고 종료하는 기능을 하..

Design Patterns/Creational Patterns

Prototype Pattern (C++)

Prototype Pattern (C++) 목적 현재 객체를 복사하여 (속성값이 동일한 또는 거의 유사한)새로운 객체를 생성한다. java에서 clonnable 인터페이스(아래의 prototype class)와 동일하다. clone함수를 구현할 때 얕은 복사를 주의해야한다. 사용 시나리오 포토샵이나 ppt에서 도형을 복사하는 시나리오가 있다. 각각의 도형은 현재 도형의 바로 옆(x축으로 +1만큼 이동)에 생성 된다. [Prototype] class ShapePrototype { public: virtual ShapePrototype* clone() = 0; }; [ConcretePrototype] class Circle : public ShapePrototype { public: Circle(int x..

Design Patterns/Creational Patterns

Builder Pattern (C++)

Builder Pattern (빌더 패턴) 목적 복잡한 객체를 생성하는 방법과 표현하는 방법을 분리한다. 즉, 생성 패턴의 결과물인 Product의 속성을 결정하는 부분과 생성하는 부분을 분리시킨다. Product를 생성할 때 Product에 전달해야 할 파라미터가 많다면 빌더 패턴을 고려해보는게 좋다. 사용 시나리오 Computer객체를 생성해야 하는 시스템이 있다. Computer객체는 각각 cpu, ram, ssd를 설정해야 하며 각각의 컴퓨터 제조사마다 스펙은 다르다. 각각 제조사마다 Builder를 만들고 Builder를 Director로 넘겨 Computer를 생산한다. 최종적으로 Client는 Director를 통해서 Product를 전달 받는다. [Product] class Computer..

Design Patterns/Behavioral Patterns

Template Method Pattern (C++)

Template Method Pattern (C++) 목적 객체의 연산에는 알고리즘 뼈대만(템플릿) 정의하고 각 단계에서 수행하는 구체적인 처리들은 서브클레스에게 위임한다. 코드의 공통적인부분과 아닌 부분을 구별하여 코드 중복을 제거하고 hook연산을 추가하여 확장성을 높인다. 사용 시나리오 파일 뷰어를 만든다고 가정한다. 파일뷰어는 doc,txt등 여러 확장자의 파일들을 보여줄 수 있다. 파일을 보여줄 때 내부적으로 항상 open -> view -> save log과정을 거친다. [AbstractClass] class FileViewer { public: void viewFile() { //템플릿 메소드 역할을 하는 함수 open(); view(); saveLog(); hookFunc(); } pro..

Design Patterns/Structural Patterns

Decorator Pattern (C++)

Decorator Pattern (C++) 목적 상황과 용도에 맞게객체에 동적으로 새로운 책임을 추가할 수 있다. OCP를 잘 나타내는 패턴으로 기능 확장이 필요할 때 기존 코드 수정 없이 확장이 가능한 구조이다. 그러나 단점으로는 데코레이터가 증가할 수록 작은 규모의 객체들이 많이 생기게 된다. 사용 시나리오 위젯을 그리는(Draw)하는 프로그램을 만든다고 가정한다. 여러가지 위젯중 캘린더 위젯을 만들고 위젯은 Scroller, Boarder로 구성할 수 있다. [Component] 동적으로 추가할 객체들의 인터페이스 역할을 한다. class WidgetComponent { public: virtual void Draw() = 0; }; [ConcreteComponent] 제공할 서비스의 베이스가 되..

Design Patterns/Behavioral Patterns

Strategy Pattern (C++)

Strategy Pattern (C++) 목적 동일 계열의 알고르즘군을 묶어서 인터페이스를 통해 제공하고 클라이언트 입장에서 이를 상호교환이 가능하도록 만든다. 상황에 맞게 유연하게 알고리즘 교체를 목적으로 한다. 사용 시나리오 리눅스에서 여러 I/O 스케줄링 방법이 존재한다. (알고리즘 군이 될 FIFO, Round Robin, Shortest Remaining Time 예제에서는 세개만 사용) 오너 사용자가 스케줄링 방법을 변경할 수 있도록 시스템을 만든다. [Strategy] 인터페이스 역할을 하는 Base strategy를 정의한다. class Scheduler { public: virtual void doSchedule() = 0; }; [ConcreteStrategy] Base strategy..

Design Patterns/Structural Patterns

Composite Pattern (C++)

Composite Pattern(복합체 패턴) 목적 부분과 전체의 계층을 표현하기 위해 객체들을 하나의 인터페이스(Component)로 묶어 트리 구조로 구조화 한다. 사용 시나리오 1. 루트(/) 디렉토리는 여러 파일과 폴더를 포함하고 있다. 2. 폴더도 여러 파일과 폴더를 포함하고 있다. [Component] 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의. Leaf와 Composite 클래스를 트리화 하기 위한 추상 클래스 class Component { public: Component(string componentName) { this->componentName = componentName; } virtual ~Component(){ } virtual void ShowName() const..

자유로운 범고래
'DesignPattern' 태그의 글 목록 (2 Page)