예제를 보면 이해가 빠릅니다.
Template Method 패턴은 상위 클래스에서 특정 동작의 Template만 정의해두고,
구체적인 단계의 동작 방법은 하위 클래스에서 재정의하는 패턴입니다.
동일한 동작의 흐름을 갖는 클래스 타입이 여럿 존재할 시 Template Method 패턴을 적용하면
전체 구성이 깔끔해지고 코드가 간결해지는 장점이 있습니다.
가상함수를 protected로 선언한 것과 상속받은 클래스에서 Machine 클래스를 어떻게 이용되고 있는지만
눈여겨 보시면 쉽게 이해가 가능합니다.
public class Machine
{
public void Execute()
{
Start();
Produce();
Stop();
}
protected virtual void Start()
{
Trace.WriteLine("Machine.Starting..");
}
protected virtual void Produce()
{
Trace.WriteLine("Machine.Producing..");
}
protected virtual void Stop()
{
Trace.WriteLine("Machine.Stopping..");
}
}
public class PizzaMachine : Machine
{
protected override void Produce()
{
Trace.WriteLine("PizzaMachine.Producing..");
}
}
다음과 같이 호출하였을 때,
new PizzaMachine().Execute();
실제 호출 흐름은 아래와 같이 이루어집니다.
1. Machine.Execute() is invoked
2. Machine.Start() is invoked
3. PizzaMachine.Produce() is invoked
4. Machine.Stop() is invoked
도식화 하여보면 아래와 같습니다.
PizzaMachine 클래스의 역할이 가벼워진 것을 볼 수 있습니다.
동일한 흐름을 갖는 다양한 Machine들이 추가될 때 따르게 되는 이점은 결코 작지 않습니다.
[출처] [C#] Template Method 패턴|작성자 에스이오케이
'강좌 > C#' 카테고리의 다른 글
멀티플렉싱(multiplexing)과 select()함수 (0) | 2012.01.19 |
---|---|
C# 멀티코어 프로그래밍 (0) | 2012.01.19 |
[C#] Singleton 패턴이 적용된 File 로거 (0) | 2012.01.19 |
[C#] 리플렉션 Reflection (1) | 2012.01.19 |
[C#] 소멸자 (de-constructor, finalizer) (0) | 2012.01.18 |