320x100
구조
#pragma once
#include <iostream>
#include <set>
#include <string>
class Strategy
{
public:
virtual int algorithmInterface(int a, int b) = 0;
};
class Context
{
private:
Strategy* strategy_;
public:
Context(Strategy* strategy)
{
strategy_ = strategy;
}
void changeStrategy(Strategy* strategy)
{
strategy_ = strategy;
}
void contextInterface()
{
std::cout << strategy_->algorithmInterface(5, 5) << std::endl;
}
};
class StrategyA : public Strategy {
public:
int algorithmInterface(int a, int b) override
{
return a * b;
}
};
class StrategyB : public Strategy
{
int algorithmInterface(int a, int b) override
{
return a + b;
}
};
class StrategyC : public Strategy
{
int algorithmInterface(int a, int b) override
{
return a - b;
}
};
사용
int main()
{
StrategyA* strategyA = new StrategyA;
StrategyB* strategyB = new StrategyB;
StrategyC* strategyC = new StrategyC;
Context* context = new Context(strategyA);
context->contextInterface();
context->changeStrategy(strategyB);
context->contextInterface();
context->changeStrategy(strategyC);
context->contextInterface();
system("pause");
return 0;
}
동일 계열의 알고리즘을 객체화하여 동일한 인터페이스(Strategy의 algorithmInterface())를 통해 다양한 알고리즘을 사용할 수 있게 하는 패턴이다.
알고리즘을 사용하는 객체(Context)는 전략 객체(Strategy의 파생 클래스)를 교체해 동일한 계열의 다양한 알고리즘을 선택할 수 있다.
320x100
'프로그래밍 > GoF' 카테고리의 다른 글
[행동 패턴] - 템플릿 메서드(Template method) (0) | 2022.01.09 |
---|---|
[행동 패턴] - 방문자(Visitor) (0) | 2022.01.09 |
[행동 패턴] - 상태(State) (0) | 2022.01.08 |
[행동 패턴] - 감시자(Observer) (0) | 2022.01.08 |
[행동 패턴] - 메멘토(Memento) (0) | 2022.01.08 |