fullstack

[디자인 패턴] 복합체 패턴 (Composite Pattern)

디자인 패턴

- 개념

객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만드는 패턴

개별적인 객체들과 객체들의 집합간의 처리 방법의 차이가 없을 경우, 같은 방법으로 취급하여 사용자가 동일하게 다룰 수 있도록 한다




- 구현


Component는 표현할 모든 구성요소들의 추상적인 인터페이스를 정의합니다

Leaf는 가장 말단의 객체로 Component에서 지정된 인터페이스를 구현합니다

Composite는 Component요소를 자식으로 가지며, Component요소를 관리하기 위한 추가적인 연산을 구현합니다




- 관련 패턴

장식자 패턴 (Decorator Pattern) - http://cpp11.tistory.com/58

플라이급 패턴 (Flyweight Pattern) - http://cpp11.tistory.com/60

반복자 패턴 (Iterator Pattern)

방문자 패턴 (Visitor Pattern)

[디자인 패턴] 플라이급 패턴 (Flyweight Pattern)

디자인 패턴

- 개념

개체의 상태를 공유 풀에 형성하여 메모리를 절약하는 기법

다량의 객체를 만들 때 공유 풀에 저장해 관리하여, 한번 생성된 객체는 중복으로 생성하지 않고 공유를 통해 효율적으로 자원을 활용한다




- 구현

FlyweightFactory에서 플라이급 객체를 생성하고 관리합니다. 또한 객체가 제대로 공유되도록 보장합니다

사용자는 ConcreteFlyweight의 인스턴트를 직접 만들 수 없고, FlyweightFactory를 통해서만 객체를 얻어야 합니다




-관련 패턴

복합체 패턴 (Composite Pattern)

상태 패턴 (State Pattern)

전략 패턴 (Strategy Pattern) - http://cpp11.tistory.com/59


[디자인 패턴] 전략 패턴 (Strategy Pattern)

디자인 패턴

- 개념

특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화 하여 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하도록 한다

즉 동적으로 알고리즘을 교체 할 수 있는 구조

하나의 결과를 만드는 목적은 동일하지만, 그 목적을 달성할 수 있는 방법이 여러가지가 존재할 경우 사용




- 구현


Strategy는 제공하는 알고리즘들의 공통의 인터페이스를 정의합니다

그리고 각 ConcreteStrategy에서 이 인터페이스를 바탕으로 실제 알고리즘을 구현합니다


Context는 Strategy객체에 대한 참조자를 관리하고, 실제로는 Strategy 서브클래스의 인스턴스를 가지고 있음으로써 구체화 합니다. 또한 Strategy 객체가 자료에 접근하는데 필요한 인터페이스를 정의합니다


사용자는 필요한 알고리즘에 해당하는 ConcreteStrategy 객체를 생성하여 이를 Context 클래스에 보냅니다

그리고 어떤 ConcreteStrategy 객체를 생성했던지 상관없이, Context에 정의된 인터페이스를 통해 동일하게 사용이 가능합니다




- 관련 패턴

플라이급 패턴 (Flyweight Pattern)