반응형

Strategy Pattern, 전략 패턴이라고 한다.

전략이라는 것은 여러 분야에서 쓰인다. 특히 스포츠에서 많이 들을 수 있는 단어이다. 그리고 언제나 전략은 한가지일 수는 없다. 딱히 한가지 방법만 있다고 한다면.. 전략이라고 하기에는 좀 부족하지 않을까. 그냥 공식? 이라고 하는 편이 나을지도 모르겠다. 

이렇게 전략은 항상 다양하게 존재한다. 상황에 따라서 전략을 바꿀수도 있다. 이러한 사상(?)을 담은 패턴이 Strategy 패턴이다.

클래스 다이어크램을 보면 Context 클래스가 존재하고 AStrategy 인터페이스가 존재한다. 그리고 AStrategy 인터페이스를 구현한 ConcreteStrategy 클래스들이 존재한다. 상황에 따라서 ConcreteStategy 클래스를 변경한다!라는 것이다. 

여기에서 주의깊게 봐야할 점은 Context 클래스에 존재하는 AStrategy : aStrategy 이다. Context클래스는 AStrategy를 가지고 있으나 직접 생성하지는 않는 관계이다. (색칠하지 않은 마름모 모양 : Aggregation). 하지만 저 멤버변수를 사용하기 위해 내부에 set메소드를 가지고 있음으로써 사용자가 직접 ConcreteStrategy를 set 할수 있게 만든다. 

따라서 사용자는 기존 코드를 변경하지 않고도 Stategy를 set만 함으로써 전략을 변경 할 수 있다. 



728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

[데코레이터 패턴]  (0) 2013.06.26
Factory Method Pattern  (0) 2011.08.30
Decorator Pattern  (0) 2011.08.30
Template Method Pattern  (0) 2011.08.30
반응형

작성중...

728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2013.07.02
Factory Method Pattern  (0) 2011.08.30
Decorator Pattern  (0) 2011.08.30
Template Method Pattern  (0) 2011.08.30
반응형

Factory Method 패턴에서는 객체를 생성하기 위한 인터페이스를 정의한다.

어떤 클래스를 만들지는 서브클래스에서 결정한다.

즉, 클래스의 인스턴스를 만드는 일을 서브클래스에 맡기게 된다.



Factory Method 구조?

abstract Product factoryMethod(String type)

abstract : 추상메소드로 선언하여 서브클래스에서 객채 생성을 책임진다.

Product : 특정 객체를 리턴한다. 

type : 매개변수를 써서 만들어낼 객체 종류를 선택할수 있다.


DIP : Dependency Inversion Principle

구상 클래스에 의존하지 않고 추상화된 것에 의존하도록 만들어라!


Product를 구현하는 ConcreteProduct 의 종류가 다양해져도 Creator는 Product를 바라보고 있기 때문에

소스에 변화가 없다. 

728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2013.07.02
[데코레이터 패턴]  (0) 2013.06.26
Decorator Pattern  (0) 2011.08.30
Template Method Pattern  (0) 2011.08.30
반응형


객체에 추가적인 요건을 동적으로 첨가할수 있다.

데코레이터는 서브클래스를 만드는것을 통해서 기능을 유연하게 확장할 수 있는 방법은 제공한다.



Decorator가 Component를 상속받음으로써 ConcreteDecorator들의 형식을 동일하게 맞출 수 있다.

그래서 Component에 여러개의 ConcreteDecorator들을 충첩시킬수도 있다.

728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2013.07.02
[데코레이터 패턴]  (0) 2013.06.26
Factory Method Pattern  (0) 2011.08.30
Template Method Pattern  (0) 2011.08.30
반응형

Template이란??
일상생활에서도 많이 쓴다. 특히 PPT만들때 많이들 사용하는것처럼 
무엇인가 정형화된 틀이라고 생각하면 될것 같다. 

상위클래스에서 abstract 메소드를 정의해서 상속받는 하위 클래스들에게 그것을 구현할
책임을 부여해주는것... 이게 Template Method 패턴의 핵심인듯 하다.
뭐 책을 보니 이것을 Subclass Responsibility라고 한다고 하네???

Abstract Class A{
abstract method1;
template method;
}

ConcreateClass extends A{
method{....}
}

뭐 이런 구조다...그냥 살펴보면 참 간단한 패턴.. 하지만 실제 적용하려면... 참 머리 뽀개지겠구나..
그리고 예전에 내가 생각없이 Copy&Paste했던 코드들이 머리속에 떠오른다.. 
정말 무식하게 똑깥이 쓸때없이 복사했던 코드들...

상위 클래스에 좀더 많은것을 두느냐, 아니면 하위클래스에서 좀더 많은 기능을 두느냐는 
어떤 프로그램이냐에 따라 달라지겠지만 적정선에서 분배하지 않으면 다시 같은 기능들이
한쪽에 몰려서 수정할때 걷잡을수 없는 노가다를 초래하게 만들것 같다.

하지만 template이라는 이름 답게 상위클래스에는 틀만 갖춰두고
최대한 하위 클래스에서 기능에 맞게 구현을 하는것이 맞지 않을까 생각이 든다.
728x90
반응형

'Development > Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2013.07.02
[데코레이터 패턴]  (0) 2013.06.26
Factory Method Pattern  (0) 2011.08.30
Decorator Pattern  (0) 2011.08.30

+ Recent posts