版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/6491808
在BUIW中采用了MVC的設計模式(圖10-3),MVC(Model /View/Controller)是程式開發中經常使用的一種模式,它很好地實作了資料層與表示層的分離。MVC把應用程式分為三種對象類型:模型,維護資料并提供資料通路方法;視圖,繪制模型的部分資料或所有資料的可視圖;控制器處理事件。視圖事先會在模型中登記,當模型資料發生改變時,馬上通知已向此模型登記的每個視圖。視圖從模型取得最新的資料并重新整理自己。
Widgets在網際網路上是一種時髦的技術,而在這裡,Widgets是一個插件式可擴充的UI元件架構,是視窗化的應用架構,并引入了容器的概念,實際上,容器是一類特殊的widget。
Model 提供了驅動widget内容的實際資料,管理Listener的注冊行為,而并不關注資料的可視化表達。有點像STL,不同的model支援不同的資料類型例如連結清單,向量組等,也支援特定控件或接口的資料類型。當資料發生變化時,Model會向關注該資料的發起者發送通知。IModel是一個基礎接口,其他的Model接口都派生于IModel接口, 有IValueModel,IArrayModel,IVectorModel,IInterfaceModel,IMenuModel和ITextModel等。
Widget是視窗上的小的控件,如文本框,圖檔框等,來完成一個Model中的資料表達,而不需要知道顯示的位置,隻需要知道内容和顯示的區域。Widget 監聽Model中資料的變化,按照開發者的需要來顯示資料,可以不做顯示處理,或者部分顯示,甚至做到背景改變。Widget同時管理焦點和按鍵事件,IWidget是一個基礎接口,其他的Widget接口都派生于IWidget接口,有ICheckWidget,I RadioWidget,IButtonWidget,IProgressWidget,ITextWidget,ISliderWidget和IWaitCursorWidget 等。
Container來管理一組widgets的位置和布局,控制Widgets在螢幕上顯示的次序,通常一個widget 自身就可以成為一個Container。根據布局的原則,Container像堆棧一樣管理Widget。Widget在其中由底向上存放,是以Widget被疊加的時候,在堆棧底層的Widget可能被隐蔽,螢幕中隻顯示堆棧頂層的Widget。也就是說,Container先畫最底層的Widget,然後逐層向上實作螢幕顯示。IContainer是一個基礎接口,其他的Widget接口都派生于IWidget接口,有IPropContainert,IConstraintContainer,IXYContainer,ICardContainer和IDecorator等。一個decorator是一個特殊的container用來管理和修飾指定的 widget,通IDecorator可以實作BorderWidget,BlendWidget,ImageWidget,TabWidget,ScrollbarWidget,ScrollIndicatorWidget,ViewportWidget,TitleWidget,ListWidget,GridWidget和PickWidget等等。
Form是針對頁面顯示的,有兩類:RootForm和一般的Form。RootForm 預先實作了一般通用的螢幕布局,負責管理Form堆棧,為Forms定義了可視化元素,包括标題、背景和軟健包括标題,軟鍵按鈕和背景,設定标題的區域,軟鍵按鈕的顯示區域,一組form的客戶區域,差別彈出對話框和手機的全屏顯示,管理未處理的按鍵事件并分發給目前的form,而且,RootForm中的元素是可以被替換或删除。
Form同樣包含标題,軟鍵按鈕和背景等顯示元素,當顯示元素的内容發生變化是發出相應的通知,擷取目前Widget沒有處理的事件。Form負責應用的邏輯,建構和放置Widgets,設定Model中的資料,處理應用的執行流程。IForm是一個基礎接口,其他的Form接口都派生于IWidget接口,主要有ListForm,StaticForm和PopupForm。