Presentation is loading. Please wait.

Presentation is loading. Please wait.

디자인 패턴 연습 II 2008. 06. ㈜이포넷 수석보 조용국. Decorator Component +operation() Decorator +component +operation() ConcreteComponent +operation() ConcreteDecoratorA.

Similar presentations


Presentation on theme: "디자인 패턴 연습 II 2008. 06. ㈜이포넷 수석보 조용국. Decorator Component +operation() Decorator +component +operation() ConcreteComponent +operation() ConcreteDecoratorA."— Presentation transcript:

1 디자인 패턴 연습 II 2008. 06. ㈜이포넷 수석보 조용국

2 Decorator Component +operation() Decorator +component +operation() ConcreteComponent +operation() ConcreteDecoratorA addedState +operation() ConcreteDecoratorB +operation() +addedBehavior() component 객체를 감싸서 새로운 행동을 제공할 수 있다. component.operation() Decorator.operation() addedBehavior()

3 Decorator in Starcraft Building +command1() +command2() AddOnBuilding +building + command1() + command2() Hatchery + command1() + command2() Lair +command1() +command2() building CommandCenter + command1() + command2() CommsatStationCommandCenter +command1() +command2()

4 Decorator in Watrix Common DAO java.sql.Connection +operation() ConnectionWrapper connection +operation() JDBC Connection +operation() DaoConnection +createConnection() +operation() java.sql.Statement +operation() StatementWrapper statement +operation() JDBC Statement +operation() DaoStatement +executeQuery() +operation() Watrix Common DAO 에서 제공하는 ConnectionWrapper, StatementWrapper 는 DAO 가 제공하는 기능과는 상관이 없고, 단순히 Connection 등을 재구성하려는 비슷한 요구가 있을때 편하라고 제공하는 서비스이지 DAO 의 확장점은 아니다.

5 Observer Subject +attach(in observer) +detach(in observer) +notify() Observer +update() ConcreteObserver subject observerState +update() ConcreteSubject subjectState +getState() subject 상태가 변경되면 다른 객체들한테 연락을 돌린다. foreach in observers o.update(); return subjectState; observerState = subject.getState() observer

6 Observer in Starcraft CloakingUnit +attach(in Detector) +detach(in Detector) +notifyDetectors(in state) Detector +update(in state) Observer +detect(in state) DarkTempler +execute(in state) 패턴의 이름이 같다는 이유로 Observer 란 유닛과 CloakingUnit 을 예로 사용했지만, Observer 패턴의 예로 삼기에는 써는 퀸의 패러사이트가 더 어울릴 것 같다.

7 Observer in Watrix Common DAO StatementListenerable +addStatementListener(in listener) +removeStatementListener(in listener) +notifyBeforeExecute(in event) +notifyAfterExecute(in event) +notifyThrowSQLException(in event) StatementListener +beforeExecute(in event) +afterExceute(in event) +throwSQLException(in event) Log4jListener +beforeExecute(in event) +afterExceute(in event) +throwSQLException(in event) +operations() … DaoConnectionProvider +getDaoConnection() StatementListenerEvent +getSql() +getStartTime() +getEndTime() +getElapsedTime() DaoConnection provider +createStatement() +getDaoConnectionProvider() DaoStatement dcon +createStatementListenerEvent() +executeQuery() … dcon. getDaoConnectionProvider().notify … (event) dcon provider listener ConsoleStatementListener +beforeExecute(in event) +afterExceute(in event) +throwSQLException(in event) event

8 FactoryMethod Product Creator +factoryMethod() ConcreteCreator +factoryMethod() ConcreteProduct 생성할 구상 클래스를 서브 클래스에서 설정한다. return new ConcreteProduct(); Product = factoryMethod();

9 FactoryMethod in Starcraft Unit Creator +createUnit() SiegeTankCreator +createUnit() SiegeTank VultureCreator +createUnit() Vulture Factory creator1 creator2 +createUnit1() +createUnit2() return creator.createUnit() creator1 creator2

10 FactoryMethod in Watrix Common DAO java.sql.Statement +executeQuery() java.sql.Connection +createStatement() DaoConnection +createStatement() DaoStatement +executeQuery() DaoConnectionProvider +getConnection() +connect() JdbcConnectionProvider +connect() +operation() JndiConnectionProvider +connect() +operation() java.sql 패키지를 구성하는 대부분의 인터페이스는 거의 모두 FactoryMethod 패턴에 의해 구성된다. 덕분에 Oracle, MySQL 등 각각의 DBMS 와는 상관없이 java.sql 패키지로 Database 프로그래밍을 할 수 있는 것이다.

11 AbstractFactory +createProductA() +createProductB() ConcreteFactory1 +createProductA() +createProductB() ConcreteFactory2 +createProductA() +createProductB() AbstractProductA ConcreteProductA1ConcreteProductA2 AbstractProductB ConcreteProductB1ConcreteProductB2 구상 클래스를 지정하지 않으면서도 일군의 객체를 생성할 수 있게 해준다.

12 AbstractFactory in Stracraft Building +command1() +command2() Gateway +command1() +command2() Barrack +command1() +command2() BattleUnit ZealotMarine WizardUnit HighTemplerMedic 스타크래프트의 건물에 내릴 수 있는 명령이 9 개로 확정되어 있기 때문에 AbstractFactory 패턴만으로 효과가 있지만. 제품군의 가변성이 높다면 AbstractFactory 패턴 자체만으로는 효과적이지 않다.

13 AbstractFactory in Stracraft Building +command1() +command2() Factory +command1() +command2() Barrack +command1() +command2() Unit SiegeTankMarine VultureMedic 제품군이 여러 개가 아니라 하나일 수도 있고, 제품군별 제품을 생산하는 메쏘드가 여러개일 수도 있다 – 조용국의 해석


Download ppt "디자인 패턴 연습 II 2008. 06. ㈜이포넷 수석보 조용국. Decorator Component +operation() Decorator +component +operation() ConcreteComponent +operation() ConcreteDecoratorA."

Similar presentations


Ads by Google