- 객체를 만들어 제공해주는 공장 형태의 생성 패턴
- 상위 클래스가 뼈대를 결정하고, 하위 클래스가 구체화하는 패턴으로, 서로 분리가 되어 있어서 결합도 느슨하고 유연성도 크게 가질 수 있다
abstract class Unit {
public abstract String getVoice();
}
class UnitFatory {
public static Unit getUnit(String unitName) {
if ("marine".equalsIgnoreCase(unitName)) return new Marine();
else if ("zealot".equalsIgnoreCase(unitName)) return new Zealot();
else return new Zergling();
}
}
class Marine extends Unit {
public Marine() {}
public String getVoice() { return "You wanna piece of me, boy?" }
}
class Zealot extends Unit {
public Zealot() {}
public String getVoice() { return "My life for Aiur!" }
}
class Zergling extends Unit {
public Zergling() {}
public String getVoice() { return "!@#$$%^&*&^#$%*" }
}
public class TestCode {
public static void main(String[] args) {
Unit unit1 = UnitFatory.getUnit("Marine");
Unit unit2 = UnitFatory.getUnit("zzealot");
System.out.println(unit1.getVoice()); // You wanna piece of me, boy?
System.out.println(unit2.getVoice()); // !@#$$%^&*&^#$%*
}
}