public interface IRender
{
void Render();
}
public interface IUpdate
{
void Update(float deltaTime);
}
Run Code Online (Sandbox Code Playgroud)
我有实现 IRender 的类,其中一些还实现 IUpdate。通过使用装饰器模式,我可以扩展他们的 Render 方法。
public abstract class Decorator: IRender
{
protected IRender decoratee;
public Decorator(IRender decoratee)
{
this.decoratee = decoratee;
}
public virtual Render()
{
decoratee.Render();
// add custom rendering code here.
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的美妙之处在于,我可以通过将对象包装到多个装饰器(如头巾娃娃)中来创建自定义渲染行为。
我的问题是 IUpdate 接口以及装饰者实现的任何其他接口现在将被装饰器隐藏。我有许多系统接受对象列表,并根据它们实现的接口对它们进行操作。装饰类只会公开 IRender 接口。
解决这个问题最干净的方法是什么?