[DP] 16. Chain of Responsibility Patterns - 42 분 (object behavioral)

[구성]
[Session 1] Part1. Orientation 1
[Session 1] Part2. Orientation 2
[Session 1] Part3. Abstract Factory 패턴
[Session 1] Part4. Builder 패턴
[Session 1] Part5. Factory Method 패턴
[Session 1] Part6. Prototype 패턴
[Session 1] Part7. Singleton 패턴
[Session 2] Part1. Adapter 패턴
[Session 2] Part2. Bridge 패턴
[Session 2] Part3. Composite 패턴
[Session 2] Part4. Decorator 패턴
[Session 2] Part5. Facade 패턴
[Session 2] Part6. Flyweight 패턴
[Session 2] Part7. Proxy 패턴
[Session 3] Part1. Chain of Responsibility 패턴
[Session 3] Part2. Command 패턴과 Template Functor
[Session 3] Part3. Interpreter 패턴
[Session 3] Part4. Iterator 패턴
[Session 3] Part5. Mediator 패턴
[Session 3] Part6. Memento 패턴
[Session 4] Part1. Observer 패턴
[Session 4] Part2. State 패턴
[Session 4] Part3. Strategy 패턴
[Session 4] Part4. Template Method 패턴
[Session 4] Part5. Visitor 패턴
[Session 4] Part6. 디자인 패턴 요약 및 적용 방안


[패턴 설명]

binary로 library를 배포하려고 할 때... callee 를 일반화 시키려면... caller를 일반화시켜야 된다.
물론, callee를 일반화한 뒤에야 가능하겠지만..

서로다른 객체는 일반화가 되면 안되고, 인터페이스도 다르면 일반화가 되지않는다. 그럴려면,
이런 종류가 여러가지가 있다. 이것을 일반화 시킬려면, 여러개의 인터페이스를 일반화 시키려면
부모로 만들어야 한다. 인터페이스/부모 클래스... 공통된 상위 클래스를 커맨드라고 하자!! 불려지는
인터페이스를 abstract execute라고 하고 아래 클래스도 모두 execute를 가지면 될 것이다. 각각의
execute는 open / print던 ... 다른 것이 될 수 있는 것이다.

command pattern의 일반적인 아이디어는 간단하다.

=>Bridge패턴의 경우 인터페이스와 구현 클래스를 나누는 것...


커맨드 리스트... for문에서 커맨드리스트를 실행시킬 수 있다.





이 패턴을 이용하면 작업요청시점과 작업 수행시점과 실제 작업이 수행되는 시점을 달리 할 수 있다.
왜냐면, Command 패턴은 직접 수행할 작업에 대한 함수를 불러주는 형태가 아니라 수행할 작업에 대한 객체를 먼저 생성하고 나중에 작업 수행을 요청하는 형태이므로 수행할 작업을 큐등에 쌓아 두었다가 나중에 작업을 수행하도록 하는 것이 가능 하기 때문이다.

undo와 Redo 기능을 지원하고자 할 때 유용하다.
상태를 저장하는 패턴은 나중에 배울 것이다.

MacroCommand

미국 동부 전기 나갔다.
전기가 나갔다 다시 들어왔을때... 어떻게 할 것인가 체크 포인트를 찍어두고 전기가 들어와서 부팅이 되면 그 수행 까지 가고 ... 데이터베이스의 리커버리 개념에도 적용할 수 있다.

Command 패턴의 장점
Command 클래스를 둠으로써 invoker와 receiver 가 분리 됨으로 loosely coupled .
커맨드 클래스의 하위클래스는 확장이 가능하다. macrocommand
새로운 작업을 추가하고 싶다. 이럴 경우 커맨드클래스의 하위클래스만 만들면 된다.

객체를 그대로 copy해서 가져오는 경우 - 복제해서 갖고 있는 경우 . 저장공간이 많이 필요
시작점만 가져온 경우- Memeto 패턴

float 연산 반복시 값이 달라진 펜티엄 요류.- 연산 반복의 오류...

undo / redo 에서는 그때 그때 상태를 저장하고 있다면

기본설계시 아키텍쳐/DB/프로토콜/UI 설계 가 있다.



C++에서 Template Functor 클래스를 이용한 Callback 구현에 대해 잘 정리해주었다.
좋은 자료!!
http://oopweb.com/CPP/Documents/FunctionPointers/Volume/index.html

C++에 dependent 하지만 설명했다.
논문 쉽지가 않더라. 여러번 읽어야 되고, 정말 똑똑하다는 생각을 했고,
구현하면 제대로 잘돌아가더라!!

대단!!

30분 넘게 여기에 대해 설명했는데 답은 역시나 직접 구현을 해보면 된다는 이야길 하고 있다.
동의한표!!

구현은 힘드나, 클라이언트에서 사용할때는 아주 간단하는 사실을 잊지 않길 바란다고 했다.


맞는 이야기다... 이런 해결책 역시 인터넷 상에 존재하기 때문에 개발자 살 길이 힘들다는 느낌을
내가 받았다.(강사가 아닌 청자의 느낌)


[개인적으로 ]
토요일 아침 보고 있었는데 마음이 집중이 안되더라구!! 그래서 이제야 듣게 되었다. 어젠 컨디션이 엉망이었고, 토요일 저녁부터 일요일 내내 아팠기에 ...
지치지 말고 열심히 하자구 ...
Posted by iarchitect