strategy, template method, visitor

24
Strategy, Template Method, Visitor

Upload: yoonjong-choi

Post on 19-Jul-2015

91 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Strategy, template method, visitor

Strategy,

Template Method,

Visitor

Page 2: Strategy, template method, visitor

Content

Strategy

Template Method

Visitor

Summery

Page 3: Strategy, template method, visitor

Strategy POLICY

Page 4: Strategy, template method, visitor

Motivation & Available

동일계열의알고리즘을정의, 캡슐화, 상호교환

알고리즘의다양화

개념적으로비슷한알고리즘을캡슐화

알고리즘의변형가능성부여

캡슐화된데이터를사용

분기문대체

Page 5: Strategy, template method, visitor

Structure & Distributor

Stratege를통해알고리즘호출

알고리즘인터페이스정의

구현된알고리즘들

Page 6: Strategy, template method, visitor

Effect

동일계열알고리즘정의

서브클래싱의대안

Context를상속하지않고 Strategy를 상속

분기문제건

구현부를선택하여사용

사용자가 ConcreteStrategy를 알아야함

Context ↔ Strategy간오버헤드발생

Strategy 객체수증가

Flyweight 활용

Page 7: Strategy, template method, visitor

Implement

Strategy, Context 인터페이스정의

Strategy::func(Context *)

Context::func(Strategy *)

Strategy를템플릿으로구현

Strategy에 선택성부여

Context에기본행동을구현한후필요에따라 Strategy를 사용할지선택

Page 8: Strategy, template method, visitor

Template

Method알고리즘의구조를인터페이스화

Page 9: Strategy, template method, visitor

Motivation & Available

알고리즘의변하지않는부분과변경가능한부분을분리

서브클래스들의공통연산을추출, 코드중복제거

서브클래스들의확장제어

Page 10: Strategy, template method, visitor

Structure & Distributor

기본연산구현추가연산인터페이스정의

추가연산만구현

Page 11: Strategy, template method, visitor

Effect

역전된제어구조

Abstract Concrete, 반대로는안됨

여러연산중하나를호출

구체연산

Abstract::구체연산

기본연산, hook 연산

팩토리메서드

사용자는각연산들의종류를알아야함

Page 12: Strategy, template method, visitor

Implement

C++의접근제어이용

기본연산최소화

이름짓기

Page 13: Strategy, template method, visitor

Visitor 멤버변수방문자

Page 14: Strategy, template method, visitor

Motivation & Available

객체구성요소마다사용하는연산이다를때

객체구성요소에대한새로운연산을추가할때

객체구성요소에대한연산이너무많을때

Page 15: Strategy, template method, visitor

Structure & Distributor

방문자인터페이스정의

실제방문자자체상태를가짐

Accept() 인터페이스정의

Accept() 인터페이스구현

그냥구조체거나컨테이너

Page 16: Strategy, template method, visitor

Effect

새로운연산추가용이

관련연산을따로관리하고관련없는연산분리

ConcreteElement 추가가어려움

클래스계층구조에걸쳐방문

상태누적

정보은닉위배

Page 17: Strategy, template method, visitor

Implement

이중디스패치

ConcreteElement, ConcreteVisitor에 따라연산이달라짐

객체구조순회책임

Element, Visitor, Iterator

Page 18: Strategy, template method, visitor

Summery 아이제끝남ㅠㅠ

Page 19: Strategy, template method, visitor

다양성의캡슐화

Strategy : 알고리즘캡슐화

State : 상태의존적인행동캡슐화

Mediator : 객체간프로토콜캡슐화

Iterator : 순회방법캡슐화

Page 20: Strategy, template method, visitor

인자가되는객체

Visitor : Accept(Visitor *)

Command : Command(Receiver *), 다형성

Memento : Memento(State *), 非다형성

Page 21: Strategy, template method, visitor

의사소통의캡슐화 vs 분산

Mediator

객체간흐름파악용이

Observer

Observer는 Subject의변화를선별적으로처리

Page 22: Strategy, template method, visitor

메시지송/수신자분리

Command

SetReceiver()

Observer

Notify()

Mediator

Colleague간통신분리

Page 23: Strategy, template method, visitor

디자인패턴에서기대할수있는점들

공통적인설계자들의어휘로쓰는패턴

설계내용보다패턴이름으로설계내용을이해시킴

시스템문서화와학습보조도구로쓰는패턴

주어진문제에대한일반적인해결방법제시

기존시스템설명을패턴으로요약

기존방법에대한보조역할로쓰는패턴

설계에맞게개발하는과정표준화

분석모델을실제구현에참조

Page 24: Strategy, template method, visitor

디자인패턴에서기대할수있는점들

리팩토링을위한목표

프로토타이핑, 확장, 통합