Factory Pattern

2020. 5. 6. 21:43디자인 패턴

1. Factory Method Pattern

 Factory Method Pattern은 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 인스턴스를 생성할지는 서브 클래스에서 결정하도록 하는 디자인 패턴입니다. Factory Method Pattern은 사용하는 인스턴스를 직접 생성하지 않고 팩토리 클래스를 통해 인스턴스를 생성합니다. 이렇게 객체의 생성과 사용을 분리함으로써 효율적으로 코드를 제어할 수 있고 결합도를 낮춰 유지보수가 용이합니다. 아래의 예제와 같이 생성합니다.

Suit

public abstract class Suit{
    public abstract String getName();
}

Suit의 구현 클래스

// SpaceSuit
public class SpaceSuit extends Suit{

    @Override
    public String getName(){
        return "SpaceSuit";
    }
}

// HydroSuit
public class HydroSuit extends Suit{

    @Override
    public String getName(){
        return "HydroSuit";
    }
}

// StealthSuit
public class StealthSuit extends Suit{

    @Override
    public String getName(){
        return "StealthSuit";
    }
}

// CombatSuit
public class CombatSuit extends Suit{

    @Override
    public String getName(){
        return "CombatSuit";
    }
}

SuitFactory

public abstract class SuitFactory{
    public abstract Suit createSuit(String type);
}

TypeSuitFactory

public class TypeSuitFactory extends SuiFactory{

    @Override
    public createSuit(String type){
        Suit suit = null;

        switch(type){
            case("space"):
                suit = new SpaceSuit();
                break;
            case("hydro"):
                suit = new HydroSuit();
                break;
            case("stealth"):
                suit = new StealthSuit();
                break;
            default:
                suit = new CombatSuit();
        }
        return suit;
    }
}

2. Abstract Factory Pattern

 Abstract Factory Pattern은 인터페이스를 이용해 사로 연관된, 혹은 서로 의존하는 객체를 구현 클래스를 지정하지 않고도 생성할 수 있는 디자인 패턴입니다. 연관된 서브 클래스를 그룹화하고 이 그룹을 자유롭게 교체할 수 있습니다. Abstract Factory Pattern은 아래와 같이 구현됩니다.

SuitAbstractFactory

public interface SuitAbstractFactory{
    // Suit는 위에서 정의한 추상 클래스
    public Suit CreateSuit();
}

SuitAbstractFactory의 구현 클래스

public class CombatFactory implements SuitAbstractFactory{

    @Override
    public Suit createSuit(){
        return new CombatSuit();
    }
}

// Space
public class SpaceFactory implements SuitAbstractFactory{

    @Override
    public Suit createSuit(){
        return new SpaceSuit();
    }
}

// Stealth
public class StealthFactory implements SuitAbstractFactory{

    @Override
    public Suit createSuit(){
        return new StealthSuit();
    }
}

SuitFactory

public class SuitFactory{
    public static Suit getSuit(SuitAbstractFactory suitAbstractFactory){
        return suitAbstractFactory.createSuit();
    }
}
참조: https://woovictory.github.io/2019/02/07/Design-Pattern-Factory-Pattern/
728x90

'디자인 패턴' 카테고리의 다른 글

Strategy Pattern  (0) 2024.01.10
Composite Pattern  (0) 2020.07.03
Chain Of Responsibility  (0) 2020.05.02
Observer Pattern  (0) 2020.05.02
Template Method Pattern  (0) 2020.05.01