多层UI的应用程序结构或设计模式是否有名称?
例如,假设我有一个使用多层<div>
:
Layer0 =背景图片,
Layer1 =左键“&lt; - ”,
Layer2 =中心按钮“*”,
Layer3 =右键“ - &gt;”
所有图层大小相同但透明度不同。
Layer0的大小为100%,全黑, Layer1的大小为100%但透明,屏幕三分之一处有一个“&lt; - ”箭头, Layer2与Layer1相同,但在屏幕的中间三分之一处有一个“*”(点) Layer3与layer1相同,但箭头指向右“ - &gt;”。
通过与屏幕交互,客户端会更改图层顺序,比如javascript,图层会改变位置以“调出”某个元素,甚至可以通过“降低”隐藏一些元素。
因此,图层顺序可以是1,3,0,2,或者甚至可以在其中包含更多具有静态内容的图层,因此顺序可以是0,5,6,1,3,25,36,19,10, 8,9 ......等。
这些应用程序有名称吗?还是设计模式?或申请结构?
这是不好的做法吗? (好吧,这可能是喜欢或不喜欢的事情)所以我们改变一下:
是否有一个最好的情况,这在理论上效果最好,或者是否存在这不是一个好主意的情况?
谢谢!
答案 0 :(得分:1)
这是一个很好的问题。
在设计中使用图层的整个想法是实现分离。但是,在ui框架中,图层通常只是表示图层,就像在什么图形之上绘制的那样。
听起来你想要做的是有一种动态重新排序图层的方法。所以是的,你可以考虑一些可能的设计模式。
主要的是责任链。如果你看一下这个模式中Gang of Four的部分,他们实际上谈的是很多ui框架,包括NextStep,它有一个Responder Chain的概念(现在是iOS和MacOS的骨干)。
一般而言,CoR是与链中的每个成员一起实现的,仅对其后继者提供引用。因此,如果您要允许人们对元素进行重新排序,那么很可能通过一个或多个拼接操作来完成。所以你可以很容易地定义这样一个操作,它会在两个现有的层之间插入一个层:它必须将自己作为它要遵循的链接的后继者,然后将下一个项目设置为它自己的后继项。
可能适用的其他设计模式是Decorator。有时候,你想要在被绘制的东西上添加一些东西,但是你仍然想要进行基本的绘画,例如,滚动通常是用装饰器添加的,因为主面板可以不变,并且出现条形的逻辑,图钉的位置以及如何响应它们与原始图纸代码完全隔离。
涵盖两种情况的一般观点:按责任分开组件。