Sigleton
Proxy
Observer
Mediator
State
interface IFeeling {
is: () => string;
}
interface IHuman {
think: () => string;
}
class HappyFeeling implements IFeeling {
is() {
return "I'm happy";
}
}
class SadFeeling implements IFeeling {
is() {
return "I'm sad";
}
}
class Human implements IHuman {
private feeling: IFeeling;
constructor() {
this.feeling = new HappyFeeling();
}
think() {
return this.feeling.is();
}
}
const human = new Human();
console.log("human says", human.think());
이런식으로 Feeling 객체를 따로 만들어서 감정을 관리하게 한다.
Human객체는 feeling이 어떤 객체인지 상관하지 않는다. 그냥 Feeling에 담긴 감정만 think할뿐이다.