기본 변하지 않는 클래스의 계층 구조에서 변하는 부분의 클래스의 추가, 정의 등이 필요할때
기존 구조를 거의 무너트리지 않고 변하는 부분을 만들 수 있는데 그것을 스트레티지 패턴이라 한다
point 는 포함 관계로 변화되는 클래스를 변하지 안흔 클래스의 부모에 포함 시켜서
클래슬르 만들때 원하는 행동의 클래스를 업케스팅해주면 된다
또한 기존에 돌아 가고 있던 행동을 쉽게 교체 하기 위해서도 많이 쓰인다
http://tongins.blog.me/80096279721
[패턴] Strategy Pattern
http://tongins.blog.me/80096279721 |
|
|
스트레티지 패턴은 복잡하거나 어려운 패턴은 아닙니다.
프로그래밍을 하다 보면 if문을 제거하고 싶어질 때가 있습니다.
이때 자연스럽게 스트레티지 패턴을 만들어서 사용하게 될 때가 있습니다.
위 다이어 그램에 대한 C# 소스는 아래와 같습니다.
-
using System;
-
-
namespace Pattern.Strategy
-
{
-
class MainApp
-
{
-
static void Main()
-
{
-
Context context;
-
-
// Three contexts following different strategies
-
context = new Context(new ConcreteStrategyA());
-
context.ContextInterface();
-
-
context = new Context(new ConcreteStrategyB());
-
context.ContextInterface();
-
-
context = new Context(new ConcreteStrategyC());
-
context.ContextInterface();
-
-
// Wait for user
-
Console.ReadKey();
-
}
-
}
-
-
/// <summary>
-
/// The 'Strategy' abstract class
-
/// </summary>
-
abstract class Strategy
-
{
-
public abstract void AlgorithmInterface();
-
}
-
-
/// <summary>
-
/// A 'ConcreteStrategy' class
-
/// </summary>
-
class ConcreteStrategyA : Strategy
-
{
-
public override void AlgorithmInterface()
-
{
-
Console.WriteLine(
-
"Called ConcreteStrategyA.AlgorithmInterface()");
-
}
-
}
-
-
/// <summary>
-
/// A 'ConcreteStrategy' class
-
/// </summary>
-
class ConcreteStrategyB : Strategy
-
{
-
public override void AlgorithmInterface()
-
{
-
Console.WriteLine(
-
"Called ConcreteStrategyB.AlgorithmInterface()");
-
}
-
}
-
-
/// <summary>
-
/// A 'ConcreteStrategy' class
-
/// </summary>
-
class ConcreteStrategyC : Strategy
-
{
-
public override void AlgorithmInterface()
-
{
-
Console.WriteLine(
-
"Called ConcreteStrategyC.AlgorithmInterface()");
-
}
-
}
-
-
/// <summary>
-
/// The 'Context' class
-
/// </summary>
-
class Context
-
{
-
private Strategy _strategy;
-
-
// Constructor
-
public Context(Strategy strategy)
-
{
-
this._strategy = strategy;
-
}
-
-
public void ContextInterface()
-
{
-
_strategy.AlgorithmInterface();
-
}
-
}
-
}
관련 URL:
http://www.cumps.be/design-patterns-strategy-pattern/
http://en.wikipedia.org/wiki/Strategy_pattern
반응형
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
iterator 패턴, 스택제거시 삭제되는 포인터(like 스마트포인터) (0) | 2012.11.02 |
---|---|
interpreter 패턴 (0) | 2012.11.02 |
command 패턴 (0) | 2012.11.02 |
chain of responsibility 패턴 (0) | 2012.11.02 |
Mediator 패턴 (0) | 2012.11.02 |