Decorator Pattern (C++) 목적 상황과 용도에 맞게객체에 동적으로 새로운 책임을 추가할 수 있다. OCP를 잘 나타내는 패턴으로 기능 확장이 필요할 때 기존 코드 수정 없이 확장이 가능한 구조이다. 그러나 단점으로는 데코레이터가 증가할 수록 작은 규모의 객체들이 많이 생기게 된다. 사용 시나리오 위젯을 그리는(Draw)하는 프로그램을 만든다고 가정한다. 여러가지 위젯중 캘린더 위젯을 만들고 위젯은 Scroller, Boarder로 구성할 수 있다. [Component] 동적으로 추가할 객체들의 인터페이스 역할을 한다. class WidgetComponent { public: virtual void Draw() = 0; }; [ConcreteComponent] 제공할 서비스의 베이스가 되..
Strategy Pattern (C++) 목적 동일 계열의 알고르즘군을 묶어서 인터페이스를 통해 제공하고 클라이언트 입장에서 이를 상호교환이 가능하도록 만든다. 상황에 맞게 유연하게 알고리즘 교체를 목적으로 한다. 사용 시나리오 리눅스에서 여러 I/O 스케줄링 방법이 존재한다. (알고리즘 군이 될 FIFO, Round Robin, Shortest Remaining Time 예제에서는 세개만 사용) 오너 사용자가 스케줄링 방법을 변경할 수 있도록 시스템을 만든다. [Strategy] 인터페이스 역할을 하는 Base strategy를 정의한다. class Scheduler { public: virtual void doSchedule() = 0; }; [ConcreteStrategy] Base strategy..
Composite Pattern(복합체 패턴) 목적 부분과 전체의 계층을 표현하기 위해 객체들을 하나의 인터페이스(Component)로 묶어 트리 구조로 구조화 한다. 사용 시나리오 1. 루트(/) 디렉토리는 여러 파일과 폴더를 포함하고 있다. 2. 폴더도 여러 파일과 폴더를 포함하고 있다. [Component] 집합 관계에 정의될 모든 객체에 대한 인터페이스를 정의. Leaf와 Composite 클래스를 트리화 하기 위한 추상 클래스 class Component { public: Component(string componentName) { this->componentName = componentName; } virtual ~Component(){ } virtual void ShowName() const..