我们正在嵌入式环境中开发,发现我们需要创建自己的UI框架。GUI框架模式?
我以前做过这个,但我有兴趣就框架的常用设计模式做一点研究。
的事情,我为模式的思维类型(有点深远):
- 的Widget聚焦/散焦
- 的Widget动画
- 数据元素之间共享
- 附加命令小部件
- 保存状态(MVC?)
对于GUI框架模式,建议阅读哪些内容?
我们正在嵌入式环境中开发,发现我们需要创建自己的UI框架。GUI框架模式?
我以前做过这个,但我有兴趣就框架的常用设计模式做一点研究。
的事情,我为模式的思维类型(有点深远):
对于GUI框架模式,建议阅读哪些内容?
我有两个给你,回调或通知,也许这就是你所说的“附加命令的小部件”,不知何故,你想对你的UI元素的状态变化作出反应。需要通知控制器发生了变化。 Cocoa/UIKit有一个叫做“Delegation”的模式和通知来完成这个,其他的使用回调函数或对象(Java Swing)或者“信号和插槽”(QT)。
我非常有用的模式,在野外不常发生的是很容易阻止状态变化,最简单的用例就是输入验证,想要防止从小部件失去焦点时小部件中的文本与您所期望的不一致。 Windows窗体曾经在一些元素(而不是全部)上拥有这些,Cocoa可以做到这一点。这可以通过在回调函数中使用返回值或参考参数(或指针)来完成,其中被调用者可以与原始小部件进行通信
这些天将样式应用到UI元素,即更改外观而不更改功能变得非常受欢迎QT可以做到这一点,我相信很多其他库
有四个装饰模式的Gang of有时也用于增强小部件的功能,使可滚动的东西可以通过装饰。这一切都取决于你需要走多远你的UI元素。祝你好运,这不是一件容易的事情。
EDT:无论你在哪里都可以应用MVC。第一批候选人是任何一种列表显示,不要让他们负责保留他们正在显示的项目。这绝对适用于组合框,列表框,表格和树,您可以将其实现为文本输入,但这可能不值得开销。
有些事情,我学会了帮助开发歌星PS3
研究XAML,尤其是绑定。
微软在用干净的XML语言描述GUI布局方面做得非常好,如果您使用XAML的简化版本进行UI描述,您将可以使用他们的工具为设计师模拟UI。
只是几个经典设计模式的指针;我认为这些都与GUI构建有关:
我知道你问模式为框架,但你仍然要依靠这些模式,因为开发人员可能会考虑到这些概念,用你的框架。
你有你的框架要求/具体需求?如果你的目标平台在内存/ CPU上有限,你可能会想放松一些“好原则”。
的Chain of Command图案。
例在图形用户界面的背景:
interface IWidget
{
bool HandleEvent(Event event); // returns true if event was handled
// or false if event was ignored
}
class Button : IWidget
{
public override bool HandleEvent(Event event)
{
switch(event.Type)
{
case EventType.MousePressed: DoStuff(); return true;
case EventType.MouseScrolled: return false;
}
}
}
这里,按钮不关心滚动事件,所以他们让他们的父母(在链命令)的处理它们。所以,如果你有一个Button在例如一个HTML页面,用户在按钮上滚动,这由父窗口小部件(HTML视图)处理,整个页面都会滚动。
对于Qt框架现实世界中使用的例子,请参阅bool QWidget::event(QEvent*)和the documentation on event filters。
另见:Design Patterns in KDE。 KDE是面向对象的C++库和软件的跨平台开源集合,作为Linux桌面环境非常流行。这些是来自2003年KDE会议的幻灯片。
Dependency Injection有时可能有用。