-
Notifications
You must be signed in to change notification settings - Fork 0
Composite Pattern & CBD
Rinirihiriro edited this page Oct 30, 2014
·
1 revision
객체들의 관계를 (Recursive한) 트리 구조로 구성하는 패턴. 단일 객체, 복합 객체 모두 같은 인터페이스를 제공한다.
한 객체(Composite)가 여러 객체를 담아 관리하는 형태의 설계에서,
composite에 또 다른 composite를 담을 수 있게 하거나,
composite와 개별 객체를 명시적으로 구분하지 않고 같은 방식으로 사용할 수 있게 하거나,
전체 객체들을 다루는 것과 그 부분을 다루는 것을 똑같은 방식으로 처리할 수 있도록 하거나,
어떠한 작업을 하위 객체들에게 전파시키면서 recursive하게 동작시키거나,
여러 객체를 모음으로써 새로운 객체를 만들고 설계할 수 있다.
class Component {
public:
virtual ~Component() {}
void Add(Component* com) {
children.push_back(com);
}
void Remove(Component* com) {
children.erase(std::find(children.begin(), children.end(), com));
}
virtual void DoSomething() {
for (auto com : children) {
com->DoSomething();
}
}
private:
std::vector<Component*> children;
};
class Foo : public Component {
public:
Foo(int num) :num(num) {}
virtual ~Foo() {}
virtual void DoSomething() override {
std::cout << num << std::endl;
Component::DoSomething();
}
private:
int num;
};
void main() {
Foo a(1);
Foo b(2);
Foo c(3);
Foo d(4);
Foo e(5)
a.Add(&b);
a.Add(&c);
d.Add(&a);
d.Add(&e);
d.DoSomething(); // 4 1 2 3 5
a.DoSomething(); // 1 2 3
c.DoSomething(); // 3
}
- Cocos2D의 Node
- addChild();
- 자신이 그려질 때, Children들도 그린다.
- 파일-폴더 계층구조
- 폴더 하위에 폴더가 들어가는 것이 가능하다.
- GUI
- Form, Panel(컨테이너)나 Lable, Edit 등을 같은 방식으로 다룰 수 있다.
소프트웨어 개발 방법론의 일종으로 프로그램의 로직을 각각의 독립적인 컴포넌트로 구성하고 이를 조립해 전체 프로그램을 구성하는 방법론.
- OOP 개발의 한계
- 바이너리 레벨의 표준X
- 재사용성이 소스코드(언어) 레벨로 제한됨.
- 컴포넌트
- 컴포넌트를 개발하고, 완성된 컴포넌트들을 조립해서 소프트웨어 개발
- 컴포넌트 개발 프로세스(CD)를 통해서 만들어진 컴포넌트들을 가지고 컴포넌트 조립 프로세스(CBD) 진행
- 컴포넌트는 binary이기 때문에 개발 언어에 독립적
- OOP보다 확장성이 높음
- 반복 점진적 개발 프로세스
- 컴포넌트 기반 설계 작업과 실제 컴포넌트 조립 및 테스트를 반복
- iterate 단계별로 컴포넌트를 선택하고 조립
- COM (Component Object Model)
- .NET