abstract class IceCreame{
public abstract getTaste():void;
}
class Vanilla extends IceCreame{
public getTaste():void {
console.log('바닐라 아이스크림');
}
}
abstract class IceCreameDecorator extends IceCreame{
private iceCreame : IceCreame;
constructor(ic: IceCreame){
super();
this.iceCreame = ic;
}
public getTaste():void{
this.iceCreame.getTaste();
}
}
class ChocoDecorator extends IceCreameDecorator{
constructor(ic:IceCreame){
super(ic);
}
public getTaste():void{
super.getTaste();
this.getChocoTaste();
}
public getChocoTaste():void{
console.log('초코 맛 추가');
}
}
class StrawberryDecorator extends IceCreameDecorator{
constructor(ic:IceCreame){
super(ic);
}
public getTaste():void{
super.getTaste();
this.getChocoTaste();
}
public getChocoTaste():void{
console.log('딸기 맛 추가');
}
}
const strawberry_choco: IceCreame =
new StrawberryDecorator(new ChocoDecorator(new Vanilla()));
strawberry_choco.getTaste();
댓글