추상팩토리(abstract factory) 패턴

관련된 여러 객체를 생성하는 디자인 패턴이다.
관련된 객체들의 의존성을 한곳에 집중시킬 수 있다

예시

WhiteShipFactory에서 배의 부품들이 하얀색인 배와 부품색이 검은색인 배를 만들고자 한다 .

추상팩토리 구현 예제

객체를 생성하는 Creator 인터페이스

public interface ShipPartsFactory {
    Anchor createAnchor();

    Wheel createWheel();
}

인터페이스에서 생성할 Product 객체

public interface Anchor {
}

public interface Wheel {
}

public class BlackAnchor implements Anchor {
}

public class BlackWheel implements Wheel{
}

public class WhiteAnchor implements Anchor {
}

public class WhiteWheel implements Wheel {

구체적인 객체들을 생성해주는 ConcreateCreators

public class BlackShipPartsFactory implements ShipPartsFactory {
    @Override
    public Anchor createAnchor() {
        return new BlackAnchor();
    }

    @Override
    public Wheel createWheel() {
        return new BlackWheel();
    }
}

public class WhiteShipPartsFactory implements ShipPartsFactory {
    @Override
    public Anchor createAnchor() {
        return new WhiteAnchor();
    }

    @Override
    public Wheel createWheel() {
        return new WhiteWheel();
    }
}

클라이언트 코드

public class WhiteShipFactory extends DefaultShipFactory {

    private final ShipPartsFactory shipPartsFactory;

    public WhiteShipFactory(ShipPartsFactory shipPartsFactory) {
        this.shipPartsFactory = shipPartsFactory;
    }

    @Override
    public Ship createShip() {
        Ship ship = new WhiteShip();
        ship.setAnchor(shipPartsFactory.createAnchor());
        ship.setWheel(shipPartsFactory.createWheel());
        return ship;
    }
}

팩토리메소드 패턴과는 객체를 생성하는 개수의 차이는 있지만 거의 흡사하다.

선언된 클래스들에 한해서는 동적으로 사용가능하고, 클라이언트와 Product간에 의존성을 낮춰주는 장점이 존재한다.

추상클래스와 마찬가지로 구체적인 클래스를 정의해야하므로, 클래스가 많아지는 단점이 존재한다.

예제는 이곳 에서 확인하실수 있습니다.