javascript pattern(2) - Factory pattern

July 18, 2019

해당 포스팅은 Javascript Design Patterns 포스팅 에서 번역하였습니다.

팩토리패턴은 클래스 기반의 생성 패턴중 또 다른 패턴입니다. 여기서는 객체를 인스턴스화 하는 책임을 하위 클래스에 위임하는 인터페이스를 제공합니다.

팩토리패턴은 서로 다르지만 유사한 특성을 가진 객체들을 관리하거나 조작해야 할 때 자주 사용됩니다.

class BallFactory {

  constructor() {

    this.createBall = function(type) {

      let ball;

      if (type === 'football' || type === 'soccer') ball = new Football();

      else if (type === 'basketball') ball = new Basketball();

      ball.roll = function() {

        return `The ${this._type} is rolling.`;

      };



      return ball;

    };

  }

}



class Football {

  constructor() {

    this._type = 'football';

    this.kick = function() {

      return 'You kicked the football.';

    };

  }

}



class Basketball {

  constructor() {

    this._type = 'basketball';

    this.bounce = function() {

      return 'You bounced the basketball.';

    };

  }

}



// creating objects

const factory = new BallFactory();



const myFootball = factory.createBall('football');

const myBasketball = factory.createBall('basketball');



console.log(myFootball.roll()); // The football is rolling.

console.log(myBasketball.roll()); // The basketball is rolling.

console.log(myFootball.kick()); // You kicked the football.

console.log(myBasketball.bounce()); // You bounced the basketball.

위의 예제에서는 매개변수를 사용하는 메서드가 있는 BallFactory라는 팩토리 클래스를 만들고, 매개 변수에 따라 객체를 인스턴스화 하는 책임을 해당 클래스에 위임하도록 합니다. type의 매개변수가 football 또는 soccer인 경우 객체의 인스턴스화는 Football 클래스에서 처리하지만, basketball인 경우에는 Basketball 클래스에서만 처리하며, BallFactory는 이에대한 클래스 생성만 위임하는 역할을 합니다.

...