3. 팩토리 메서드 패턴(Factory Method Pattern)
[그림] 팩토리 메서드 패턴(Factory Method Pattern) 예제 클래스 다이어그램
3. 4 구현
팩토리 메서드 패턴 예제 프로그램은 EHApp, IView, MyView, MyApp, 테스트 코드 순으로 구현하겠습니다.
3.4.1 EHApp
EHApp에는 뷰 개체를 생성하는 메서드를 약속합니다. 그리고 초기화, Run, 해제순으로 수행하는 뼈대를 제공하며 초기화에서는 뷰 개체를 생성하는 메서드를 호출하여 뷰 개체를 설정할게요.
▶EHApp.cs
namespace FactoryMethod { abstract class EHApp //뼈대를 제공하는 추상 클래스 { protected IView MainView{ get; set; } public virtual void InitInstance() { MainView = MakeView();//뷰 개체를 설정 } public virtual void Run() { MainView.Show(); } public virtual void ExitInstance() { MainView = null; } protected abstract IView MakeView();//뷰 개체를 생성하는 메서드 약속 } } |
3.4.2 IView, MyView
IView는 응용에서 사용자와 상호작용을 하는 뷰 개체를 보여주는 기능을 약속한 인터페이스입니다. IView를 기반으로 정의한 MyView 클래스에서는 약속한 보여주기 기능을 목적에 맞게 구현합니다.
▶IView.cs
namespace FactoryMethod { interface IView { void Show();//보여주기 기능에 대한 메서드 약속 } } |
▶MyView.cs
using System; namespace FactoryMethod { class MyView:IView { public MyView() { Console.WriteLine("MyView 개체 생성"); } public void Show() { Console.WriteLine("메인 뷰 활성화"); } } } |
3.4.3 MyApp
MyApp에서는 구체적으로 어떠한 뷰를 생성할 것인지를 구현해야 합니다. 그리고 필요하다면 EHApp에 정의한 메서드를 재정의하여 필요한 작업을 수행할 수 있습니다. 여기에서는 초기화 메서드와 해제 메서드를 재정의할게요.
▶MyApp.cs
using System; namespace FactoryMethod { class MyApp:EHApp { public override void InitInstance()//재정의 { Console.WriteLine("MyApp 초기화"); base.InitInstance(); } public override void ExitInstance()//재정의 { base.ExitInstance(); Console.WriteLine("MyApp 해제"); } protected override IView MakeView()//뷰 개체를 생성하는 메서드 구체적 구현 { return new MyView(); } } } |
3.4.4 테스트 코드
테스트는 단순히 MyApp 개체를 생성하여 초기화, Run, 해제를 수행하는 것으로 하겠습니다.
▶MyApp.cs
namespace FactoryMethod { class Program { static void Main(string[] args) { MyApp app = new MyApp(); app.InitInstance(); app.Run(); app.ExitInstance(); } } } |
▶실행 결과
MyApp 초기화 MyView 개체 생성 메인 뷰 활성화 MyApp 해제 |
이상으로 세 번째 주제인 팩토리 메서드 패턴에 대하여 살펴보았습니다.
'프로그래밍 기술 > Escort GoF의 디자인 패턴 C#' 카테고리의 다른 글
[C#] 단일체 패턴(Singleton Pattern) - 설계(Design) (0) | 2016.04.26 |
---|---|
[C#] 단일체 패턴(Singleton Pattern) - 개요, 시나리오 (0) | 2016.04.26 |
[C#] 4. 원형 패턴(Prototype Pattern) - 구현 (0) | 2016.04.25 |
[C#]4. 원형 패턴(Prototype Pattern) - 설계(Design) (0) | 2016.04.25 |
[C#] 4. 원형 패턴(Prototype Pattern) - 개요, 시나리오 (0) | 2016.04.25 |
[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 설계(Design) (0) | 2016.04.25 |
[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 개요, 시나리오 (0) | 2016.04.25 |
[C#] 2. 빌더 패턴(Builder Pattern) - 구현 (0) | 2016.04.25 |
[C#] 2. 빌더 패턴(Builder Pattern) - 설계 (0) | 2016.04.25 |
[C#] 2. 빌더 패턴(Builder Pattern) - 개요, 시나리오 (0) | 2016.04.25 |