[javascript] Builder Pattern (3)

in #kr7 years ago

We POST 23 kinds of GOF design patterns implemented in javascript. Today, we will look at Abstract Factory Pattern for the second time.


(javascript로 구현하는 GOF 디자인 패턴 23가지를 POST 하고 있습니다. 오늘은 세번째로 Builder Pattern 에 대하여 알아 보겠습니다.)

1. Overview

  • wiki: A pattern that allows you to create different expression results in the same creation procedure by separating the creation and presentation methods of the composite object.
    (복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.)
  • The builder pattern is used when there are many creation options. It accepts the parameters of the desired option and integrates to create the object.
    (빌더 패턴은 생성 옵션이 많을경우 사용합니다. 원하는 옵션의 매개 변수들을 받아 통합하여 객체를 생성합니다.)

2. UML diagram


skip

3. Example code


The following code is an example that generates character information after character pre-setting in MMORPG game.
(다음 코드는 MMORPG 게임에서 캐릭터 기본설정후 캐릭터정보를 생성하는 예제입니다.)


var CharacterInfo = function(name,job,hairStyle,hairColor,faceStyle,stature,skinColor){
    var _name = name;
    var _job = job;
    var _hairStyle = hairStyle;
    var _hairColor = hairColor;
    var _faceStyle = faceStyle;
    var _stature = stature;
    var _skinColor = skinColor;
    this.getName = function(){
        return _name;
    };
    this.getJob = function(){
        return _job;
    };
    this.getHairStyle = function(){
        return _hairStyle;
    };
    this.getHairColor = function(){
        return _hairColor;
    };
    this.getFaceStyle = function(){
        return _faceStyle;
    };
    this.getStature = function(){
        return _stature;
    };
    this.getSkinColor = function(){
        return _skinColor;
    };
    this.getInfo = function(){
        var info = {
            name:_name,
            job:_job,
            hairStyle:_hairStyle,
            hairColor:_hairColor,
            faceStyle:_faceStyle,
            stature:_stature,
            skinColor:_skinColor
        }
        return JSON.stringify(info);
    };
};

var CharacterInfoBuilder = function(){
    var _name;
    var _job;
    var _hairStyle;
    var _hairColor;
    var _faceStyle;
    var _stature;
    var _skinColor;
    this.setName = function(name){
        _name = name;
        return this;
    };
    this.setJob = function(job){
        _job = job;
        return this;
    };
    this.setHairStyle = function(hairStyle){
        _hairStyle = hairStyle;
        return this;
    };
    this.setHairColor = function(hairColor){
        _hairColor = hairColor;
        return this;
    };
    this.setFaceStyle = function(faceStyle){
        _faceStyle = faceStyle;
        return this;
    };
    this.setStature = function(stature){
        _stature = stature;
        return this;
    };
    this.setSkinColor = function(skinColor){
        _skinColor = skinColor;
        return this;
    };
    this.build = function(){
        return new CharacterInfo(_name,_job,_hairStyle,_hairColor,_faceStyle,_stature,_skinColor);
    };
};

// client
var barbarianInfoBuilder = new CharacterInfoBuilder();
var barbarianInfo = barbarianInfoBuilder
                        .setName("barbarian")
                        .setJob("warrior")
                        .setHairStyle("mohican")
                        .setHairColor("orange")
                        .setFaceStyle("obovoid")
                        .setStature("190")
                        .setSkinColor("black")
                        .build();
console.log(barbarianInfo.getInfo());

var amazonInfoBuilder = new CharacterInfoBuilder();
var amazon = amazonInfoBuilder
                        .setName("amazon")
                        .setJob("archer")
                        .build();
console.log(amazon.getInfo());

4. Postscript


The build pattern is similar to the factory pattern, but uses differently. If the creation process is complex, it is the greatest point to delegate to a subclass.
(빌드 패턴은 팩토리 패턴과 유사 하지만 용도가 다릅니다. 생성과정이 복잡할 경우 서브 클래스에 위임하는게 가장큰 포인트 입니다.)

Sort:  

Cheer Up!

  • from Clean STEEM activity supporter

This post received a 55% upvote from @krwhale thanks to @lsh1117! For more information, click here!
이 글은 @lsh1117님의 소중한 스팀/스팀달러를 지원 받아 55% 보팅 후 작성한 글입니다. 이 글에 대한 자세한 정보를 원하시면, click here!

나도 한번 써봄
tip!

ㅎㅎ tipu 에 입금 시켰어요? tipu에 돈 입금시켜놔야지 그돈으로 다른사람한테 팁 주는거에요. https://steemit.com/kr-newbie/@moneykim/tipu-usd5-tipu 이글 참조.

그럼 안할래여..

뉴비는 언제나 응원!이에요.
팁! : 태그를 5개를 꽉 채우면 더 많은 분들께 읽힐 수 있어요.
30.00% 보팅
현재 보상량 : [ 평균 - 2.59 / 4개 / 합계 : 10.36 ]

  • kr-newbie 보안관 봇! (beta 0.8.0 - 2017/08/29)