TypeScript/타입스크립트 TypeScript

[타입스크립트] 팩토리 패턴

Rainbow🌈Coder 2022. 4. 28. 04:53
728x90

1번 방식

interface Shoe {
  purpose: string;
}

class BalletFlat implements Shoe {
  purpose = "dancing";
}

class Boot implements Shoe {
  purpose = "woodcutting";
}

class Sneaker implements Shoe {
  purpose = "walking";
}
class ShoeFactory {
  static create(Type: "balletFlat" | "boot" | "sneaker"): Shoe {
    switch (Type) {
      case "balletFlat":
        return new BalletFlat();
        break;
      case "boot":
        return new Boot();
        break;
      case "sneaker":
        return new Sneaker();
        break;
    }
  }
}

let boot = ShoeFactory.create("boot");
let balletFlat = ShoeFactory.create("balletFlat");
let sneaker = ShoeFactory.create("sneaker");
console.log(boot.purpose);
console.log(balletFlat.purpose);
console.log(sneaker.purpose);

2번 방식

type Shoe = {
  //타입 대신 인터페이스를 사용해도 됨
  purpose: string;
};

class BalletFlat implements Shoe {
  purpose = "dancing";
}

class Boot implements Shoe {
  purpose = "woodcutting";
}

class Sneaker implements Shoe {
  purpose = "walking";
}
let ShoeFactory = {
  create(Type: "balletFlat" | "boot" | "sneaker"): Shoe {
    switch (Type) {
      case "balletFlat":
        return new BalletFlat();
      case "boot":
        return new Boot();
      case "sneaker":
        return new Sneaker();
    }
  },
};
let boot = ShoeFactory.create("boot");
let balletFlat = ShoeFactory.create("balletFlat");
let sneaker = ShoeFactory.create("sneaker");
console.log(boot.purpose);   //woodcutting
console.log(balletFlat.purpose); //dancing
console.log(sneaker.purpose);  //walking
728x90