반응형
C++ 디자인 패턴 : Strategy 패턴 (전략 패턴)
알고리즘을 교체가능 하게 하는 패턴.
- 알고리즘의 인터페이스를 정의하고, 각각의 클래스별로 캡슐화 한 후 사용.
- 결과는 같으나 결과를 만드는 방법이 여러개인 경우 사용.
//전략 패턴 인터페이스
public interface IStrategy
{
int Calculator(int a, int b);
}
//전략 패턴 클래스
public class PatternPlus : IStrategy
{
public int Calculator(int a, int b)
{
return a + b;
}
}
//전략 패턴 클래스
public class PatternMinus : IStrategy
{
public int Calculator(int a, int b)
{
return a - b;
}
}
public class Node
{
private int data;
// 패턴
private IStrategy pattern;
// 초기 데이터와 패턴을 설정한다.
public Node(int data, IStrategy pattern)
{
this.data = data;
this.pattern = pattern;
}
// 전략적으로 패턴을 바꾸기 위한 프로퍼티
public IStrategy Pattern
{
get { return this.pattern; }
set { this.pattern = value; }
}
// 데이터를 추가합니다. 패턴에 의해 계산됩니다.
public void Add(int data)
{
this.data = this.pattern.Calculator(this.data, data);
}
}
// 결과 출력
public void Print()
{
Console.WriteLine("Result - " + data);
}
}
class Program
{
static void Main(string[] args)
{
var plus = new PatternPlus();
var minus = new PatternMinus();
//처음에는 plus 패턴을 넣습니다.
var node = new Node(0, plus);
// 10을 넣습니다. (DEBUG : 10)
node.Add(10);
// 5을 넣습니다. (DEBUG : 15)
node.Add(5);
// 패턴을 바꿉니다.
node.Pattern = minus;
// 1을 넣습니다. (DEBUG : 14)
node.Add(1);
// 3을 넣습니다. (DEBUG : 11)
node.Add(3);
// 패턴을 바꿉니다.
node.Pattern = plus;
// 1을 넣습니다. (DEBUG : 12)
node.Add(1);
// 결과는 12가 나옵니다.
node.Print();
Console.WriteLine("Press any key...");
Console.ReadKey();
}
}
Add라는 함수를 호출할 때 Pattern에 따라 값이 바뀐다.
Java, C#의 라이브러리를 보면 이런 식으로 구성되어 있는 클래스들이 많다.
결국 Startegy pattern은 재사용성을 최대한 올려서 가독성과 성능을 올리고자 하는 목적의 패턴.
반응형
'개발자 > Programming' 카테고리의 다른 글
VS Code 편집기 분할 단축키 (0) | 2020.05.19 |
---|---|
vscode에서 깃허브 연동 종결 (퍼옴) (0) | 2020.04.26 |
PRQA-C++(SW 신뢰성, 정적테스트) (0) | 2020.04.10 |
VS CODE 단축키(유용한 거 생길 때마다 업데이트) (0) | 2020.04.07 |
줄 끝을 정규화시키시겠습니까? 경고창에 대해 (0) | 2020.04.01 |