Eddie's Blog

[design pattern] Factory Method Pattern 본문

programmings

[design pattern] Factory Method Pattern

eddie.y 2019. 3. 28. 20:02

유형: 생성자 패턴

생성할 대상의 객체(Product의 구현체)와 그것의 생성을 위임하는 Factory를 모두 추상화하고, 대상 객체의 구현 객체는 Factory의 하위 클래스인 Factory 구현체에서 결정하도록 한다. 대상의 생성과 작동을 모두 추상화하고 Factory에 위임하여 사용자는 대상의 구현체(eg. Car, Computer)에 대해 신경 쓰지 않고 Factory로 부터 대상의 작동을 보장받는다. 필요한 적절한 Factory 구현체만을 사용하여 loose-coupling에 도달할 수 있다.

// factories
public abstract class AbstractProductFactory {
    protected Product product;

    public AbstractProductFactory() {
        this.product = this.createProduct();
    }

    abstract protected Product createProduct();

    public void runProduct() {
        this.product.operate();
    }
}

public class CarFactory extends AbstractProductFactory {
    @Override
    protected Product createProduct() {
        return new Car();
    }
}

public class ComputerFactory extends AbstractProductFactory {
    @Override
    protected Product createProduct() {
        return new Computer();
    }
}

// products
public interface Product {
    void operate();
}

public class Car implements Product {
    @Override
    public void operate() {
        System.out.println("Engine starts!");
    }
}

public class Computer implements Product {
    @Override
    public void operate() {
        System.out.println("Computer is running!");
    }
}


// result
public class Application {
    public static void main(String[] args) {
        AbstractProductFactory factory = new CarFactory();
        factory.runProduct();// Engine starts!
        
        factory = new ComputerFactory();
        factory.runProduct();// Computer is running!
    }
}
Comments