.NET/설계 패턴(C#)

[설계 패턴 C#] 24. 템플릿 메서드 패턴(Template Method Pattern)

언제나휴일 2016. 12. 9. 00:26
반응형

[설계 패턴 C#] 

24. 템플릿 메서드 패턴(Template Method Pattern)


TemplateMethod.zip


"본문 내용"

[Escort GoF 디자인 패턴 C#] 24. 템플릿 메서드 패턴(Template Method Pattern)

[Escort GoF 디자인 패턴 C#] 24. 템플릿 메서드 패턴(Template Method Pattern) 설계

[Escort GoF 디자인 패턴 C#] 24. 템플릿 메서드 패턴(Template Method Pattern) 구현


     ▶ EHApp.cs

using System;

namespace TemplateMethod

{

    class EHApp

    {

        public void Do()

        {

            InitInstance();

            Run();

            ExitInstance();

        }

        protected void Run()

        {

            ConsoleKey key = ConsoleKey.Escape;

            while((key = SelectMenu())!=ConsoleKey.Escape)

            {

                switch(key)

                {

                    case ConsoleKey.F1: About(); break;

                    default: KeyProc(key); break;

                }

                Console.WriteLine("아무키나 누르세요");

                Console.ReadKey();

            }

        }

        protected virtual void InitInstance(){    }

        protected virtual void ExitInstance(){    }

        protected virtual void About()

        {

            Console.WriteLine("EH Camera");

        }

        protected virtual void ViewMenu()

        {

            Console.WriteLine("ESC:프로그램 종료 F1:제품 정보");

        }

        protected virtual void KeyProc(ConsoleKey key)

        {

            Console.WriteLine("잘못된 메뉴를 선택하였습니다.");

        }

        private ConsoleKey SelectMenu()

        {           

            ViewMenu();

            Console.WriteLine("메뉴를 선택하세요.");

            return Console.ReadKey().Key;

        }

    }

}


▶ MyApp.cs

using System;

namespace TemplateMethod

{

    class MyApp:EHApp

    {

        protected override void InitInstance()

        {

            Console.WriteLine("사진 관리자 프로그램 V0.1");

            Console.WriteLine("아무키나 누르세요.");

        }

        protected override void ExitInstance()

        {

            Console.WriteLine("사진 관리자 프로그램을 종료합니다.");

        }

        protected override void About()

        {

            base.About();

            Console.WriteLine("응용 개발팀 2012. 5. 30");

        }

        protected override void ViewMenu()

        {

            base.ViewMenu();

            Console.WriteLine("F2: 사진 추가 F3: 사진 검색");

        }

 

        protected override void KeyProc(ConsoleKey key)

        {

            switch(key)

            {

                case ConsoleKey.F2: AddPicture(); return;

                case ConsoleKey.F3: SearchPicture(); return;                       

            }                    

            base.KeyProc(key);

        }

        void AddPicture()

        {

            Console.WriteLine("사진 추가 기능을 선택하였습니다.");

        }

        void SearchPicture()

        {

            Console.WriteLine("사진 검색 기능을 선택하였습니다.");

        }

    }

}


▶ 
Program.cs

namespace TemplateMethod

{

    class Program

    {

        static void Main(string[] args)

        {

            MyApp app = new MyApp();

            app.Do();

        }

    }

}

템플릿 메서드 패턴 예제 실행 화면






반응형