디자인 패턴 ~Factory Method~

1. 소개



GoF의 디자인 패턴에서 Factory Method 패턴을 정리합니다.

2. Factory Method 패턴이란?


  • Factory라는 영어 단어는 공장이라는 의미입니다.
  • Factory Method 패턴은, 인스턴스의 만드는 방법을 슈퍼 클래스로 정해, 구체적인 생성 처리는 서브 클래스측에서 실시하는 방식입니다.
  • 인스턴스를 생성하는 공장을 Tmplate Method 패턴으로 구성한 것이 Factory Method 패턴이 됩니다.
  • GoF 디자인 패턴은 생성과 관련된 디자인 패턴으로 분류됩니다.

  • 3. 샘플 클래스 다이어그램





    4. 샘플 프로그램



    ID 카드 공장에서 ID 카드를 작성하는 프로그램입니다.

    4-1. Factory 클래스



    Factory의 기본이 되는 클래스입니다. 인스턴스를 만드는 방법을 결정합니다.

    Factory.java
    package framework;
    
    public abstract class Factory {
    
        public final Product create(String owner) {
            Product product = createProduct(owner);
            registerProduct(product);
            return product;
        }
    
        protected abstract Product createProduct(String owner);
        protected abstract void registerProduct(Product product);
    }
    

    4-2. Product 클래스



    Factory에서 생성되는 객체의 기본이 되는 클래스입니다.

    Product.java
    package framework;
    
    public abstract class Product {
        public abstract void use();
    }
    

    4-3. IDCardFactory 클래스



    Factory 클래스로 정의된 메소드를 구현하는 구상 클래스입니다.

    IDCardFactory.java
    package idcard;
    import java.util.ArrayList;
    
    import framework.Factory;
    import framework.Product;
    
    public class IDCardFactory extends Factory {
    
        private ArrayList<String> owners = new ArrayList<String>();
    
        protected Product createProduct(String owner) {
            return new IDCard(owner);
        }
    
        protected void registerProduct(Product product) {
            IDCard icCard = (IDCard)product;
            String owner = icCard.getOwner();
            owners.add(owner);
        }
    
        public ArrayList<String> getOwners() {
            return owners;
        }
    }
    

    4-4. IDCard 클래스



    Product 클래스에 정의된 메서드를 구현하는 구체적인 클래스입니다.

    IDCard.java
    package idcard;
    import framework.Product;
    
    public class IDCard extends Product {
    
        private String owner;
    
        IDCard(String owner) {
            System.out.println(owner + "のカードを作ります。");
            this.owner = owner;
        }
    
        public void use() {
            System.out.println(owner + "のカードを使います。");
        }
    
        public String getOwner() {
            return owner;
        }
    }
    

    4-5. Main 클래스



    메인 처리를 실시하는 클래스입니다.

    Main.java
    import framework.*;
    import idcard.*;
    
    public class Main {
        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();
        }
    }
    

    4-6. 실행 결과


    山田のカードを作ります。
    鈴木のカードを作ります。
    佐藤のカードを作ります。
    山田のカードを使います。
    鈴木のカードを使います。
    佐藤のカードを使います。
    

    5. 장점



    Factory/Product는 framework 패키지, IDCardFactory/IDCard는 idcard 패키지에 존재합니다.
    framework 패키지는 idcard 패키지를 가져오지 않습니다. 즉, framework 패키지는 idcard 패키지에 의존하지 않는 형태입니다.
    완전히 다른 '제품'과 '공장'을 만들려는 경우 프레임 워크 패키지의 내용을 수정할 필요가 없습니다.

    6. GitHub


  • htps : // 기주 b. 코 m / 이타나카 730 /

  • 7. 디자인 패턴 목록


  • GoF 디자인 패턴 요약

  • 8. 참고



    이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
  • Java 언어로 배우는 디자인 패턴 입문

  • 매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
    디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.

    좋은 웹페이지 즐겨찾기