private constructorで目的別にインスタンス化する
TypeScriptでconstructorをprivateにすることで、目的別にインスタンスを生成できる。
class AccountManager {
static readonly #Free = 0
static readonly #Premium = 100
readonly #point: number
// 外部からはインスタンス化できない
private constructor(point: number) {
this.#point = point
}
add(point: number) {
return new AccountManager(this.#point + point)
}
// 目的別でstaticのファクトリメソッドを用意する
static createFreeAccount() {
return new AccountManager(this.#Free)
}
static createPremiumAccount() {
return new AccountManager(this.#Premium)
}
}
const freeAccount = AccountManager.createFreeAccount()
const free2 = freeAccount.add(100)
const premiumAccount = AccountManager.createPremiumAccount()
const premium2 = premiumAccount.add(100)