Abstract factory 패턴은 인터페이스(Employee)를 통해 생성하려는 객체의 실체 타입(Peon)을 은닉시켜준다.
생성된 객체를 사용하는 클라이언트는 인터페이스만을 알고 있으므로 인터페이스를 구현하고 있는 구체 클래스의
변화로부터 자유롭다.(Peon 클래가 변화 더라도 new Peon 부분에 대한 변경이 필요 없다.)
구체 클래스는 인터페이스보다 변하기 쉽기 때문에 가능하면 인터페이스를 사용하라는 '의존 역전의 원칙(DIP,Dependency Inversion Principle)'을 생각해보자.
자바의 컬렉션 Framework이 Iterator를 생성하는 방식 : Abstract Factory의 좋은 예
Collection가 Iterator는 모두 추상적이므로
Abstract Factory : Collection은 객체를 생성하는 객체들이 구현하는 인터페이스
Abstract Product : Iterator는 생성되는 객체들이 구현하는 인터페이스.
Concrete Factory : Collection 인터페이스를 구현체 Tree는 자신을 순환 할 수 있는 iterator들을 반환
Concrete Product : Tree의 Walker는 Iterator의 구현체
{
Iterator iterator();
//...
}
interface Iterator
{
Object next();
boolean hasNext();
//...
}
class Tree implements Collection
{
public Iterator iterator()
{
return new Walker();
}
}
private class Walker implements Iterator
{
public Object next() { /*...*/ return null; }
public boolean hasNext() { /*...*/ return false; }
}