type Shoe = {
purpose:string;
};
class BalletFlat implements Shoe {
public purpose = 'dancing';
};
class Boot implements Shoe {
purpose = 'woodCutting';
};
class Sneaker implements Shoe {
purpose = 'walking';
};
let Shoe = {
create(type:'balletFlat'|'boot'|'sneaker'):Shoe{
switch (type){
case 'balletFlat': return new BalletFlat;
case 'boot':return new Boot;
case 'sneaker':return new Sneaker;
}
}
}
const balletShoe = Shoe.create('balletFlat');
console.log(balletShoe.purpose);
호출자는 팩토리가 특정 인터페이스를 만족하는 클래스를 제공할 것이라는 사실만을 알아야 하고, 어떤 구체 클래스가 이 일을 하는지 알지 못해야 한다.