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); //walking728x90