我們正在嵌入式環境中開發,發現我們需要創建自己的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有時可能有用。