추상 공장 패턴

구체적인 클래스를 지정하지 않고 관련 개체 또는 종속 개체의 패밀리를 만들기 위한 인터페이스를 제공합니다.



참가자들


  • AbstractFactory: 추상 제품을 생성하는 작업에 대한 인터페이스를 선언합니다.
  • ConcreteFactory: 구체적인 제품 개체를 만드는 작업을 구현합니다.
  • AbstractProduct: 제품 개체 유형에 대한 인터페이스를 선언합니다.
  • 제품: 해당 콘크리트 팩토리에 의해 생성될 제품 객체를 정의합니다. AbstractProduct 인터페이스를 구현합니다.
  • 클라이언트: AbstractFactory 및 AbstractProduct 클래스에 의해 선언된 인터페이스를 사용합니다.

  • 암호




    public class Main {
    
        public static void main(String[] args) {
            // Abstract factory #1
            AbstractFactory factory1 = new ConcreteFactory1();
            Client client1 = new Client(factory1);
            client1.run();
    
            // Abstract factory #2
            AbstractFactory factory2 = new ConcreteFactory2();
            Client client2 = new Client(factory2);
            client2.run();
        }
    }
    
    public interface AbstractFactory {
    
        AbstractProductA createProductA();
    
        AbstractProductB createProductB();
    
    }
    
    public class ConcreteFactory1 implements AbstractFactory {
    
        @Override
        public AbstractProductA createProductA() {
            return new ProductA1();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB1();
        }
    
    }
    
    public class ConcreteFactory2 implements AbstractFactory {
    
        @Override
        public AbstractProductA createProductA() {
            return new ProductA2();
        }
    
        @Override
        public AbstractProductB createProductB() {
            return new ProductB2();
        }
    
    }
    
    public interface AbstractProductA {
    
    }
    
    public interface AbstractProductB {
        void interact(AbstractProductA a);
    }
    
    public class ProductA1 implements AbstractProductA {
    
    }
    
    public class ProductB1 implements AbstractProductB {
    
        @Override
        public void interact(AbstractProductA a) {
            System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
        }
    
    }
    
    public class ProductA2 implements AbstractProductA {
    
    }
    
    public class ProductB2 implements AbstractProductB {
    
        @Override
        public void interact(AbstractProductA a) {
            System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
        }
    
    }
    
    public class Client {
    
        private AbstractProductA abstractProductA;
        private AbstractProductB abstractProductB;
    
        public Client(AbstractFactory factory) {
            abstractProductB = factory.createProductB();
            abstractProductA = factory.createProductA();
        }
    
        public void run() {
            abstractProductB.interact(abstractProductA);
        }
    }
    

    산출



    ProductB1 interacts with ProductA1
    ProductB2 interacts with ProductA2
    




    eidherjulian61 / 디자인 패턴








    좋은 웹페이지 즐겨찾기