2016년 2월 17일 수요일

builder 패턴

기본 구성
director : 무엇을 빌딩하는지 정확히 못한채 객체를 빌드
builder : director 가 생성을 수행하기 위해 사용하는 인터페이스
concrete builder :director의 지시에 따라 product를 실제로 빌딩한다 보통 외부에서(client에 의해) 혹은 abstract factory에 의해 생성된다.
product : director의 지시하에 builder가 빌딩하는 객체



<!doctype html>
<html lang="en">
 <head>
  <title>builder pattern</title>
 </head>
 <body>
  <script>
 var director = function(product){  //무엇을 빌딩하는지 정확히 알지 못한채 빌딩
  product.concrete_builder_action1() //director의 지시에 따라 product를 빌딩된다;
  product.concrete_builder_action2()
  product.concrete_builder_action3()
 }

 function Builder(){  //공통 인터페이스 
  var common_value1 = this.common_value1 = 1; 
  var common_value2 = this.common_value2 = 2; 
  var common_value3 = this.common_value3 = 3; 

  this.concrete_builder_interface1 = function(){ //구현 인터페이스 
   this.concrete_builder_action1 = function(){
    console.log("interface1:"+common_value1);
   }
   this.concrete_builder_action2 = function(){
    console.log("interface1:"+common_value2);
   }
   this.concrete_builder_action3 = function(){
    console.log("interface1:"+common_value3);
   }
  };

  this.concrete_builder_interface2 = function(){
   this.concrete_builder_action1 = function(){
    console.log("interface2:"+common_value1);
   }
   this.concrete_builder_action2 = function(){
    console.log("interface2:"+common_value2);
   }
   this.concrete_builder_action3 = function(){
    console.log("interface2:"+common_value3);
   }
  }
  
 }

  var build = (new Builder);  //공통 인테페이스 생성 
  var concrete_build1 =  new build.concrete_builder_interface1;  //구현 인터페이스 생성
  var concrete_build2 =  new build.concrete_builder_interface2;
 
  var product1 = function(){
   director(concrete_build1);
  };

  var product2 = function(){
   director(concrete_build2);
  };
 
 product1();
 product2();

  </script>
 </body>
</html>

댓글 없음:

댓글 쓰기