ES2015でFactory Method

シリーズ化してきましたね。
Factory Methodはこんな感じですね。

/**
 * 製品を表す抽象クラスもどき。
 * 具体的な処理はサブクラスで定義する。
 */
class Product {
  use() {}
}

/**
 * 工場を表す抽象クラスもどき。
 * 具体的な処理はサブクラスで定義する。
 */
class Factory {
  create(owner) {
    const product = this.createProduct(owner)
    this.registerProduct(product)
    return product
  }
  createProduct(owner) {}
  registerProduct(product) {}
}
/**
 * IDカードを表すクラス。
 */
class IDCard extends Product {
  constructor(owner) {
    super()
    console.log(`${owner}のカードを作ります`)
    this.owner = owner
  }
  use() {
    console.log(`${this.owner}のカードを使います`)
  }
  getOwner() {
    return this.owner
  }
}

class IDCardFactory extends Factory {
  constructor() {
    super()
    this.owners = new Array()
  }
  createProduct(owner) {
    return new IDCard(owner)
  }
  registerProduct(product) {
    this.owners.push(product.getOwner())
  }
  getOwners() {
    return this.owners
  }
}

const factory = new IDCardFactory()
const card1 = factory.create('SCOTT')
const card2 = factory.create('TIGER')
const card3 = factory.create('MIKE')

card1.use()
card2.use()
card3.use()