디자인 모드 학습회 제4회: Factory Method 모드

5822 단어 DesignPatterns

개시하다


본 신청은 모 회사 내에서 실시하는 디자인 모델 학습회의 자료입니다.
본 신청서는 서적'Java 언어로 학습한 디자인 모드로 시작하기을 바탕으로 학습하며, 샘플 코드는 C#로 대신 해설을 진행한다.
1차: Iterator 모드
2회: 어댑터 모드
3차: Template Method 모드

Factory Method 모드는


슈퍼클래스에서 제작 처리하는 프레임, 하위 클래스에서 구체적으로 처리하는 육박Template Method 모드(3차 학습)은 실례적으로 생성된 장면에 적용되는 디자인 모델이다. 
실례적인 제작 방법은 슈퍼 클래스에 규정하고 구체적인 첨가는 모두 하위 클래스에 진행한다.

샘플 프로그램의 분류도


여기서는 신분증(ID카드)을 만드는 공장을 소재로 샘플 프로그램을 소개한다.

각 반의 역할


네임스페이스
클래스 이름
과업
Framework
Product
추상 방법만 정의합니다 Use의 추상 클래스
Framework
Factory
구현 방법Create의 추상 클래스
Idcard
IDCard
설치 방법 Use의 클래스
Idcard
IDCardFactory
방법CreateProduct, RegisterProduct의 클래스 설치
Main
MainTest
동작 테스트 클래스
  • Framework:인스턴스로 생성된 프레임 면
  • IDCard: 몸싸움을 하는 쪽
  • Product 클래스


    '제품'을 표현한 반입니다.
    이 카테고리에서는 추상적인 방법인 Use만 설명하고 구체적인 실현은 모두 하위 카테고리에 의뢰했다.
    '제품'은'사용 가능한 물건'으로 규정한다.
    namespace Framework
    {
        public abstract class Product
        {
            public abstract void Use();
        }
    }
    

    팩토리 클래스.


    '공장'을 표현한 학급이다.
    이 클래스에서 추상적인 방법인 Create Product,Register Product를 발표했고 구체적인 실시는 모두 부류에 위탁되었다.
    각 방법의 뜻은 다음과 같다.
    메서드 이름
    의향
    CreateProduct
    제조 제품
    RegisterProduct
    등록된 제품
    Create
    Product의 인스턴스를 생성합니다.'크레이터프로덕트로 제품을 만들고, 리지스터프로덕트로 만든 제품을 등록'하는 절차로 이뤄졌다.
    플랜트는 Create 방법을 사용하여 Product를 생성한 인스턴스입니다.
    namespace Framework
    {
        public abstract class Factory
        {
            public Product Create(string owner)
            {
                Product p = CreateProduct(owner);
                RegisterProduct(p);
                return p;
            }
    
            protected abstract Product CreateProduct(string owner);
            protected abstract void RegisterProduct(Product product);
        }
    }
    

    IDCard 등급


    제품 Product 클래스로 정의된 하위 클래스입니다.
    using Framework;
    
    namespace Idcard
    {
        public class IDCard : Product
        {
            private string owner;
    
            public IDCard(string owner)
            {
                Console.WriteLine(owner + "のカードを作ります。");
                this.owner = owner;
            }
    
            public override void Use()
            {
                Console.WriteLine(owner + "のカードを使います。");
            }
    
            public String GetOwner()
            {
                return owner;
            }
        }
    }
    

    IDCardFactory 클래스


    플랜트 팩토리 클래스로 정의된 하위 클래스입니다.
    CreateProduct는 "제품 만들기"를 구현했습니다.
    Register Product에서는 IDCard의 owner(소유자)를 owners 필드에 추가하여 로그인 기능을 구현했습니다.
    using Framework;
    
    namespace Idcard
    {
        public class IDCardFactory:Factory
        {
            private List<string> owners = new List<string>();
    
            protected override Product CreateProduct(string owner)
            {
                return new IDCard(owner);
            }
    
            protected override void RegisterProduct(Product product)
            {
                owners.Add(((IDCard)product).GetOwner());
            }
    
            public List<string> GetOwners()
            {
                return owners;
            }
        }
    }
    

    고급반


    네임스페이스 Framework와 Idcard를 사용하여 실제 IDCard를 제작합니다.
    using Framework;
    using Idcard;
    
    namespace Main
    {
        public class MainTest
        {
            public static void Main(string[] args)
            {
                Factory factory = new IDCardFactory();
                Product card1 = factory.Create("結城浩");
                Product card2 = factory.Create("とむら");
                Product card3 = factory.Create("佐藤花子");
    
                card1.Use();
                card2.Use();
                card3.Use();
            }
        }
    }
    

    실행 결과


    방금 MainTest를 실행한 결과는 다음과 같습니다.
    結城浩のカードを作ります。
    とむらのカードを作ります。
    佐藤花子のカードを作ります。
    結城浩のカードを使います。
    とむらのカードを使います。
    佐藤花子のカードを使います。
    

    Factory Method 모드의 특징


    등장인물


    이번 샘플 프로그램의 등장인물과 그 역할은 다음과 같다.
    인물.
    과업
    제품
    프레임 측면.추상 클래스는 Factory Method 모드에서 생성된 인스턴스에 필요한 인터페이스를 정의합니다.구체적인 내용은 하위 클래스의 IDCard에 의해 결정됩니다.
    팩토리
    프레임 측면.Product의 추상 클래스를 생성합니다.구체적인 내용은 하위 클래스의 IDCardFactory에 의해 결정됩니다.
    IDCard
    구체적인 육박 방면.구체적인'제품 내용'을 제정하다.
    IDCardFactory
    구체적인 육박 방면.공장에서 진행되는 "제작품 등록"기능을 실현하다.

    특징.


    Factory는 특정 컨텐트를 결정하는 IDCardFactory에 대해 아는 바가 없습니다.
    팩토리는 Product와 인스턴스 생성 방법(CreateProduct 방법)을 호출하면 Product만 생성된다는 것을 알고 있습니다.
    의도

  • 실례 생성에 사용되는 방법을 바꾸어 호출하고 new의 실제 실례 생성을 통해 슈퍼 클래스는 구체적인 클래스 이름의 제약에서 방출됩니다.
  • 장점


    팩토리 메트로드 모델은 프레임워크 네임스페이스의 내용을 수정하지 않고도 전혀 다른'제품'과'공장'을 제작할 수 있다는 장점이 있다.
    이번 샘플 프로그램은 신분증(ID카드)을 만드는 공장을 소재로 프레임워크와 아이드카드 두 이름 공간으로 나눠 실장했다.
    Framework에서 Idcard를 가져오지 않았습니다.
    따라서 같은 틀에서 새 학급을 만들더라도 프레임워크의 내용을 수정할 필요가 전혀 없다.
    예를 들어'TV를 만드는 공장'이라는 전혀 다른 주제라면 프레임워크를 가져온 다른 텔레비전 이름 공간을 만들 수 있다.

    샘플 코드


    이하 공개.
    https://github.com/ayayo/FactoryMethodPattern

    좋은 웹페이지 즐겨찾기