Eddie's Blog

[design pattern] Abstract Factory Pattern 본문

programmings

[design pattern] Abstract Factory Pattern

eddie.y 2019. 3. 28. 18:15

유형: 생성자 패턴

연관 혹은 의존 객체의 집합(families)을 생성하는데 있어서 그에 대한 구현 클래스를 특정하지 않고 인터페이스를 제공한다.

// abstract interface
public interface Animal {
    String getAnimal();
    String makeSound();
}

// concrete animal implementation
public class Cat implements Animal {
    @Override
    public String getAnimal() {
        return "Cat";
    }
    
    @Override
    public String makeSound() {
        return "Meow";
    }
}

public class Dog implements Animal {
    @Override
    public String getAnimal() {
        return "Dog";
    }
    
    @Override
    public String makeSound() {
        return "Bow wow";
    }
}

// abstract factory
public interface AbstractFactory<T> {
    T create(String type);
}

// concrete factory implementation
public class AnimalFactory implements AbstractFactory<Animal> {
    @Override
    public Animal create(String type) {
        if ("Dog".equalsIgnoreCase(type)) {
            return new Dog();
        } else if ("Cat".equalsIgnoreCase(type)) {
            return new Cat();
        }
        return null;
    }
}

public class FactoryProvider {
    public static AbstractFactory getFactory(String factoryType) {
        if ("Animal".equalsIgnoreCase(factoryType)) {
            return new AnimalFactory();
        } else if ("Color".equalsIgnoreCase(factoryType)) {
            return new ColorFactory();//omitted color factory and its related objects
        }
        return null;
    }
}
Comments