我希望在我的“小型”项目中使用OCP原则。实际上,我在实现这个原则方面遇到了问题。让我展示一下我写的内容。
abstract class AnimationType {
public abstract createAnimation(timing: number): { in: string, out: string };
}
class FadingAnimation extends AnimationType {
public createAnimation(timing: number): { in: string, out: string } {
return { in: 'opacity: 0', out: 'opacity: 1' }
}
}
class TransformAnimation extends AnimationType {
public createAnimation(timing: number): { in: string, out: string } {
return { in: 'transform: translateX(-100%)', out: 'transform: translateX(100%)' }
}
}
class AnimationCreator {
private timing: number;
constructor(time: number) {
this.timing = time;
}
getAnimation(animation: AnimationType): { in: string, out: string } {
return animation.createAnimation(this.timing);
}
}
我写得好吗?如果是,那我真正获得了什么?如果我想添加淡入淡出动画,我需要发送FadingAnimation类的对象。如果我想要转换动画,我需要发送TransformAnimation类的对象 - 所以我必须在某个地方使用switch(this.animationType)。
animation instanceof TransformAnimation
区分类实例(这是你不想在 OCP 中做的事情),否则类没有用处。 - Estus Flask