DESIGN PATTERN

[디자인패턴] 추상 팩토리 패턴 (abstract Factory Pattern) 이란? - 개발자 배찌

개발자 배찌 2022. 4. 13. 10:29
728x90

😀추상 팩토리 패턴
팩토리 메서드 패턴과 비슷해보이지만, 명확한 차이점이 있다.

- 팩토리 메서드 패턴 : 조건에 따른 객체 생성을 팩토리클래스로 위임하여, 팩토리 클래스에서 객체를 생성하는 패턴.

- 추상 팩토리 패턴 : 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고,
이를 팩토리조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴


😀코드로 알아보기

ComputerFactory.java

package study.abstractFactoryPattern.code0;

public interface ComputerFactory {
    void createKeyboard();
    void createMouse();
}


LgComputer.java

package study.abstractFactoryPattern.code0;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LgComputer implements ComputerFactory {
    @Override
    public void createKeyboard() {
        log.info("LG keyboard");
    }

    @Override
    public void createMouse() {
        log.info("LG mouse");
    }
}


SamsungComputer.java

package study.abstractFactoryPattern.code0;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SamsungComputer implements ComputerFactory{
    @Override
    public void createKeyboard() {
        log.info("SAMSUNG keyboard");
    }

    @Override
    public void createMouse() {
        log.info("SAMSUNG mouse");
    }
}


FactoryOfCOmputerFactory.java

package study.abstractFactoryPattern.code0;

public class FactoryOfComputerFactory {

    public FactoryOfComputerFactory(String type){

        ComputerFactory computerFactory = null;

        switch (type){
            case "LG" :
                computerFactory = new LgComputer();
                break;
            case "SAMSUNG" :
                computerFactory = new SamsungComputer();
                break;
        }

        computerFactory.createKeyboard();
        computerFactory.createMouse();
    }

}


AbstractFactoryPatternTest.java

package study.abstractFactoryPattern;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.abstractFactoryPattern.code0.FactoryOfComputerFactory;

@Slf4j
public class AbstractFactoryPatternTest {
    @Test
    void code0test(){
        FactoryOfComputerFactory factoryOfComputerFactory = new FactoryOfComputerFactory("LG");
    }
}