我正在为各种目标编写一个跨平台的 UI 工具包,其中一些是嵌入式的。其中一些平台支持“保留”渲染模式,其中一些更“即时”,所以我认为对于我的视觉效果我有两棵树 - 伪代码:
abstract class Visual
{
Visual( Widget widget ) { this.widget = widget; }
}
abstract class RetainedVisual : Visual
{
abstract void Setup( Renderer r );
abstract void Teardown( Renderer r );
}
abstract class ImmediateVisual : Visual
{
abstract void Paint( Renderer r );
}
到目前为止,一切都很好。但现在我也有ContainerVisual
对小部件层次结构进行编码的类:
abstract class ContainerVisual : Visual
{
void AddChild( Visual child ) {}
}
哪种迫使我拥有一个ImmediateContainerVisual
和一个RetainedContainerVisual
开始看起来臃肿的课程。更好设计的想法?