成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Windows Mobile Sensors API庫的設計

移動開發
這里將介紹Windows Mobile Sensors API庫的設計,希望本文能對大家了解Mobile Sensors API庫有所幫助。

Windows Mobile 7正在開發過程中,相比較Android和iPhone的紅火,Windows Mobile似乎還是不溫不火。這里我們要談到的是Windows Mobile Sensors API庫的設計。

背景

熱烈歡迎 simon_new88 同學加入 Mobile Sensors API - Native unified APIs for Windows Mobile Sensors 項目。為了他更快熟悉,我把GSensor的設計記錄下來。關于該項目的一些信息可以參考 Windows Mobile下的重力感應器(Gravitational Sensor)開發Windows Mobile下使用CppUnitLite輸出測試結果

簡介

本文講述Windows  Mobile Sensors API庫中重力感應器部分(GSensor)的設計。講述一個統一訪問接口的Sensor庫的設計方法和一些設計模式的應用。

需求

統一訪問接口的Sensor庫(Native unified APIs for Windows Mobile Sensors)的需求:

1.統一的API訪問接口。由于為HTC和Samsung移動設備提供各自提供DLL來封裝Sensor,所以提供不一樣的訪問接口。使用Windows  Mobile Sensors API庫,應用開發人員在開發客戶端(Client)代碼時不需要知道具體設備的API,只是需要調用Windows  Mobile Sensors API庫的統一接口就可以得到相應的GSensor運行信息。

2.統一輸出GVector的單位。由于HTC和Samsung移動設備各自的GSensor庫輸出的GVector的單位是不一樣的,HTC輸出是-100到100的值,而Samsung又不一樣。所以Windows  Mobile Sensors API庫需要把輸出值的單位進行統一。應用開發人員在開發客戶端(Client)代碼時,一套代碼可以同時支持HTC和Samsung的移動設備。

設計

總體設計

GSensor部分的總體類圖設計:

GSensor部分的總體類圖 

下面文章分部分講述。

GSensor設計

GSensor設計

GSensor是一個抽象類,定義了統一的訪問接口,主要提供三個主要的接口:

1.取GVector信息接口。客戶端調用GetGVector()函數可以得到實時的GVector信息。

2.事件訂閱接口。當客戶端調用Register()訂閱GVector事件,通過Unregister()函數退訂該事件。事件的發送通過Observer模式實現,后面講到。

3.單位調整接口。客戶端可以調用Scale()來調整想要的單位。

GetGVector(),Register()和Unregister()為純虛函數。表示GSensor指定的契約(contract),其繼承子類SamsungGSensor和HTCGSensor必須實現這些接口以厲行該契約。這兩個子類在實現這些接口時分別調用各自平臺相關的DLL來實現。

由于HTC的DLLHTCSensorSDK.dll沒有定時回調函數的實現,所以在Windows  Mobile Sensors API庫實現了一個ThreadTask類來定時查詢GVector的信息。ThreadTask類封裝了Start(),Stop()和ProcessTask()函數,Start()負責產生一個線程,Stop()負責結束由Start()產生的線程,而ProcessTask()負責定期執行任務。執行任務的具體內容在Process()中定義,Process()也是純虛函數,也就是contract,由子類實現需要執行的具體任務,這里可以認為是Method Template模式的實現。HTCGSensor繼承了ThreadTask類,然后重載了Process()定時查詢GVector信息,然后通過調用GSensor的GVectorChanged()函數來通知Client。后面將講Observer模式,怎么GSensor怎么通知Client。

GSensorFactory的設計

GSensorFactory的設計

這里使用了Simple Factory模式,客戶端只是需要調用GSensorFactory就可以取出GSensor的指針,GSensorFactory可以判斷設備類型取出SamsungGSensor或者HTCGSensor的實例。關于Simple Factory可以參考 我的實用設計模式之Simple Factory,Factory Method和Abstract Factory

Observer的設計

從需求看,Windows  Mobile Sensors API庫需要實現事件訂閱接口。當客戶端訂閱了消息時,客戶端會自動接收到GVector信息,這個功能是使用Observer模式實現的。關于Observer模式可以參考 我的實用設計模式之Observer模式

Observer的設計

我使用了一個開源的Observer模式實現,和經典的Observer的實現有點差異。但是目標是一致的,就是實現消息提供方和消息接收方的解耦。那個實現可以參考Experiences of Implementing the Observer Design Pattern (Part 3)

Notifier是經典Observer模型的Abstract Subject。GSensor是Concrete Subject繼承Notifier,通過調用notify()函數來通知Observers。Listener是經典Observer模式的Abstract Observer。和經典Observer模式有點不一樣。Notifier通過Event類來通知Listener。而Listener增加了一層繼承于GSensorListener。GSensorListener根據具體通知內容而定義。這里通過C++的模板類來實現的。關于這方面的實現可以參考Template metaprogramming

template <class interface_type>
class Listener : public interface_type

SensorTesterView是Concrete Observer。需要實現GSensor_GVectorChanged()來處理通知消息。

Singleton的設計

Singleton的設計 

SamsungGSensor和HTCGSensor分別設計為Singleton,因為不管有多少個消息訂閱者(Listener)都只有一個消息發送方。也就是一套系統里面只有一個SamsungGSensor或者HTCGSensor的實例。

關于Mobile Sensors API項目

這個項目還是在起步階段,當前實現了samsung的重力感應器,我把項目host到 Mobile Sensors API - Native unified APIs for Windows Mobile Sensors 了,我會持續改進,把各種sensors的實現到這個項目中。

由于我手頭上沒有HTC的機器,如果誰有興趣可以加入到項目中幫我測試HTC設備,由于加入了Unit Test,測試變得很簡單,只需要執行程序,參考測試輸出文件就可以了,不需要調試。當然這個測試過程是一個不斷迭代的過程,只是Unit Test把子過程簡單化了。

源代碼:http://mobilesensor.codeplex.com/SourceControl/ListDownloadableCommits.aspx

環境:VS2008 + WM 6 professional SDK + Samsung Windows Mobile SDK

【編輯推薦】

  1. 微軟開始組織開發大型Windows Mobile應用程序
  2. Windows Mobile上使用WINCE自帶數據庫
  3. 微軟將推出Windows Mobile應用軟件商店
  4. 微軟網絡商店正式開始接受應用程序
  5. Windows Mobile在線商店細則已由微軟發布
責任編輯:彭凡 來源: 博客園
相關推薦

2011-04-25 17:17:55

Gesture APIWindows Mob

2011-07-19 17:09:44

jQuery Mobi事件

2009-09-25 11:04:07

C++動態加載DLL

2011-07-19 17:03:31

jQuery Mobi默認配置

2009-11-03 12:52:38

VB.NET Wind

2022-11-24 13:17:43

2009-08-17 13:18:01

C#調用Windows

2009-08-17 13:26:20

C#調用Windows

2009-12-07 17:42:07

Windows Mob

2009-12-15 15:31:47

2009-04-10 08:58:47

Windows Mob微軟移動OS

2009-05-17 10:48:19

微軟Windows Mob移動OS

2009-06-30 10:48:49

WinCEWindows Mob

2009-04-08 09:17:54

Windows MobWINCE數據庫

2009-07-08 10:02:41

Servlet 3.0

2009-03-06 19:14:41

Windows Pho微軟

2009-03-09 18:53:26

WIndows MobSilverlight

2009-09-02 17:28:26

C#程序設計Windows窗體

2010-02-02 10:10:58

Windows Mob

2011-09-01 10:21:52

jQuery Mobi元素
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av黄色免费 | 91在线观看视频 | 毛片一区二区三区 | 三级视频久久 | 亚洲成人一区 | 国产欧美一区二区三区在线看 | 国产精品久久久久久亚洲调教 | 视频一区在线观看 | 日韩在线播放av | 亚洲欧美日韩精品久久亚洲区 | 成人国产在线视频 | 成人免费网站 | 精品久久香蕉国产线看观看亚洲 | 成人亚洲 | 日本一区二区高清不卡 | 欧美第一页 | 一区二区三区视频在线免费观看 | 亚洲一区二区三区免费在线观看 | 国产精品久久国产精品99 | 在线看av网址 | 狠狠骚| 久久国产精品99久久久久久丝袜 | 男人的天堂视频网站 | 毛片在线免费 | 免费黄色成人 | 国产一级毛片精品完整视频版 | 国产精品小视频在线观看 | 狠狠操狠狠干 | 亚洲国产精品视频一区 | 在线观看第一页 | 91中文字幕在线观看 | 精品中文字幕久久 | 在线精品亚洲欧美日韩国产 | 九九亚洲| www.久久 | 天天想天天干 | 国产99久久精品 | 国产精品久久国产精品 | 99久久免费精品视频 | 国产在线a视频 | 久久久www成人免费精品 |