Java Story

[ Java ] Factory, Prototype 디자인 패턴

WhiteDuck 2016. 1. 20. 09:38


Factory Method 

      - 인스턴스 작성을 하위 클래스에게 위임



 Factory 클래스는 Product클래스를 생산하는 기능을 하는 디자인패턴입니다. 따라서 Create라는 메소드를 통해서 인스턴스를 생성하는 역할을 담당합니다. 




class Factory {

public Product create(Object obj){

return new Product( obj );

}

}



ProtoType Method

                    - 복사해서 인스턴스를 만든다.



 Client클래스는 원형이 되는 인스턴스를 근본으로 새로운 인스턴스를 만드는 ProtoType 디자인 패턴입니다. create이라는 메소드로 인스턴스를 복제하지만 어느 클래스의 인스턴스를 복제할지는 관여하지 않습니다. 이는 create메소드 안에 ProtoType 인터페이스를 구현한 ConcreteProtoType 클래스의 createClone이라는 메소드를 통하여서 각각의 복제를 수행하기 때문입니다.


주로 3가지 경우에 사용합니다

1) 종류가 너무 많아 한개의 클래스로 할 수 없는 경우

2) 클래스로부터 인스턴스를 생성하기 어려운 경우

3) 프레임워크와 생성할 인스턴스를 분리하고 싶은 경우


Client - 생성관리자


class Client {

public Hashtable ht = new Hashtable();

public void register(String key, ProtoType p) {

ht.put(key, p);

}

public ProtoType create(String key) {

ProtoType p = ht.get(key);

return p.createClone();

}

}



ProtoType - 객체 복사 인터페이스


interface ProtoType extends Cloneable {

public abstract ProtoType createClone(){}

}



Product implement ProtoType - concreteProtoType


Product implements ProtoType {

public ProtoType createClone(){

ProtoType p = null;

try{

p = (ProtoType) clone();    // 자신을 복제하는 메소드 (피상적 복제)

} catch(CloneNotSupportedException e) {

e.printStackTrace();

}

}

}



※ 피상적 복제 : 배열이라면 값 참조값만 복제하고 하나하나씩 복제하지 않음, 깊은 복사 필요시 clone()메소드를 오버라이드하여 사용



반응형