프로그래밍 기술/Escort GoF의 디자인 패턴 C#

[C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 구현

언제나휴일 2016. 4. 25. 12:07
반응형

3. 팩토리 메서드 패턴(Factory Method Pattern)


팩토리 메서드 패턴(Factory Method Pattern) 예제 클래스 다이어그램

[그림] 팩토리 메서드 패턴(Factory Method Pattern) 예제 클래스 다이어그램


FactoryMethod.zip


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 해제

 

 이상으로 세 번째 주제인 팩토리 메서드 패턴에 대하여 살펴보았습니다


2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 개요, 시나리오


2016/04/25 - [프로그래밍 기술/Escort GoF의 디자인 패턴 C#] - [C#] 3. 팩토리 메서드 패턴(Factory Method Pattern) - 설계(Design)


반응형