Download presentation
Presentation is loading. Please wait.
Published byMalia Rushworth Modified over 9 years ago
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 제품군이 여러 개가 아니라 하나일 수도 있고, 제품군별 제품을 생산하는 메쏘드가 여러개일 수도 있다 – 조용국의 해석
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.