목적
객체 생성에 관련된 패턴입니다.
객체의 생성 방법과 표현 방법을 분리하는 패턴입니다.
구조
설명
- Director : Builer 의 multi interface 를 사용해서 제품을 생성
- Builder : 복잡한 제품을 만들기 위해서 multi interface 사용 (Javascript 에서는 사용하지 않음)
- ConcreteBuilder
- Builder interface 로 구현
- 새로 생성된 Product 를 검색
- Product : 제품
코드 sample
- Director : Shop
- ConcreteBuilder : CarBuilder, TruckBuilder
- Product : Car, Truck
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| function Shop() { this.construct = function(builder) { builder.step1(); builder.step2(); return builder.get(); } } function CarBuilder() { this.car = null; this.step1 = function() { this.car = new Car(); }; this.step2 = function() { this.car.addParts(); }; this.get = function() { return this.car; }; } function TruckBuilder() { this.truck = null; this.step1 = function() { this.truck = new Truck(); }; this.step2 = function() { this.truck.addParts(); }; this.get = function() { return this.truck; }; } function Car() { this.doors = 0; this.addParts = function() { this.doors = 4; }; this.say = function() { log.add("I am a " + this.doors + "-door car"); }; } function Truck() { this.doors = 0; this.addParts = function() { this.doors = 2; }; this.say = function() { log.add("I am a " + this.doors + "-door truck"); }; }
var log = (function () { var log = ""; return { add: function (msg) { log += msg + "\n"; }, show: function () { alert(log); log = ""; } } })(); function run() { var shop = new Shop(); var carBuilder = new CarBuilder(); var truckBuilder = new TruckBuilder(); var car = shop.construct(carBuilder); var truck = shop.construct(truckBuilder); car.say(); truck.say(); log.show(); }
|
참조사이트