태그 : Creation
2006/02/24   Creational Pattern 중 AbstractFactory Pattern
2006/02/23   Creational Pattern 중 Builder Pattern
2006/02/23   Creational Pattern 중 Prototype
Creational Pattern 중 AbstractFactory Pattern
Abstract Factory Pattern은 Abstract Factory가, 관련된 여러 instance를 생성할 수 있도록 하는 인터페이스를 제공하는 것이다. 또한, 각 instance의 생성에 대한 interface만을 제공하고, 실제로 어떠한 instance를 생성할 것인지에 대해서는 Abstract Factory의 Sub Class(ConcreateFactory)에서 결정하도록 하여 높은 유연성을 보장하고 있다.

가전제품공장과 같이, 특정 부류의 제품을 생성하는 것을 생각하면 되겠다.
가전제품공장에서는 '냉장고'도 생산할 수 있고, 'TV'도 생산할 수 있을 것이다.


 
<< image : http://www.dofactory.com/ >>



Client의 경우 AbstractFactory interface를 이용하여 Abstract Product interface를 구현한 product의 instance를 얻고, 사용만 하면 되기 때문에, 어떤 제품이, 어떤 과정을 거처 생성되는지에 대하여 고려할 필요가 없으며,  ConcreateFactory와 Product의 구현을 추가하여 새로운 product instance를 사용할 수 있게 된다.



Abstract Factory pattern의 경우에는 Concreate Factory를 추가하므로써, 동일한 제품군의 다양한 제품을 생성할 수 있다는 장점이 있지만, Factory에 새로운 제품군을 추가하여야 할 경우, CreateProduct...()와 같은 형식의 method를 추가하여야하기 때문에, 이러한 부분에서는 확장성이 낮다고 볼 수 있다.




p.s.
잇힝 ~ 요것도 세미나에서 잘못 발표했다오~(__~);;
공부를 제대로 했어야 하는 것을..ㅠ0ㅠ
by 나무귀신 | 2006/02/24 00:07 | Design Pattern | 트랙백 | 덧글(0)
Creational Pattern 중 Builder Pattern
Builder Pattern은 특정 instance들을 생성할 때 수행되어야 할 작업이 동일할 경우 적용될 수 있는 pattern이다.


 

<< image 출처 : http://www.dofactory.com/ >>


Director의 경우, Builder의 instance를 인자로 받아, Builder의 method를 실행하는 역할을 수행한다.

이 경우, Director는 어떤 결과물이 만들어 지는지는 상관하지 않고, 결과물 생성에 필요한 Method만을 실행해 준다.

Builder interface를 구현한 ConcreteBuilder에서는 이러한 결과물을 만들기 위한 Method들을 실제로 구현하며,
Method들의 실행결과로 생성되는 결과물을 저장하는 변수를 가진다.
또한, 결과물을 return하기 위한 Method를 가진다.




Builder Pattern을 통하여 얻을 수 있는 장점은,
생성될 때(초기화 될 때) 동일한 과정을 수행해야 하는 서로 다른 Class의 instance에 대하여 통일된 생성방법(초기화 방법)을 제공할 수 있다는 것이다. (서로 동일한 상속관계를 가지지 않는 instance를 동일한 방법으로 생성할 수 있다!!!)


public class Director{
  public void Construct(Builder builder){
  builder.buildA();
  builder.buildB();
}
}

public interface Builder{
public void buildA();
public void buildB();
}

public class ProductA{
...
}
public class ProductB{
...
}

public class ProductABuilder implements Builder{
private ProdctA product = new ProductA();
  public void buildA(){ ...}
pubilc void buildB(){...}
pubilc ProductA getResult(){return product;}
}

public class ProductBBuilder implements Builder{
private ProdctB product = new ProductB();
  public void buildA(){ ...}
pubilc void buildB(){...}
pubilc ProductB getResult(){return product;}

}
by 나무귀신 | 2006/02/23 23:38 | Design Pattern | 트랙백 | 핑백(1) | 덧글(0)
Creational Pattern 중 Prototype
Prototype Pattern은 Class의 정의로부터 인스턴스를 생성하는 것이 아니라, 사용중인 Instance로부터 그것의 복제본을 생성하여 사용하는 것이다.

prototype pattern의 경우, 자신이 가진 member variable 값들을 새로운 instance에 복사하고, 그 인스턴스를 return하는 메소드를 구현하게 된다.(일반적으로 copy()라는 이름으로...)


public class MyPrototype{
private MyType mVariable;
...
public MyPrototype copy(){
   MyPrototype item = new MyPrototype();
   item.mVariable = this.mVariable;
   ...
   return item;
}
...
}



Class가 아닌 Instance로부터 Instance를 생성할 때 얻을 수 있는 이점은, 초기화를 다시 할 필요가 없다는 것이다.
물론 Class의 생성자에서 Instance의 초기화를 할 수도 있겠지만,
Instance를 생성하여 초기화 한 후, 이를 복제하여 사용하는 것은, 생성자에서 초기화 하는 것보다 Runtime에서의 유연성을 높여준다는 장점이 있다.



이 pattern을 사용할 때 주의할 점은,
맴버변수가 어떤 클레스에 대한 instance라면, item.mValue = this.mValue;로 할 경우 Reference가 복사되기때문에,
item.mValue = new MyType(this.mValue); 와 같이, 동일한 값을 가지는 새로운 instance를 생성해 주어야 한다는 것이다.



Prototype Pattern은 특정 작업을 할 때 사용되는 Method나 Rule을 Run-time에 설정하고,
규칙이 사용되는 instance를 생성할 때 적용될 수 있을 것이다.
by 나무귀신 | 2006/02/23 01:45 | Design Pattern | 트랙백 | 덧글(0)


< 이전페이지 다음페이지 >