国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Observer設(shè)計(jì)模式在手機(jī)導(dǎo)航軟件中的應(yīng)用

2014-08-14 05:23孟婷婷何利力
電腦知識與技術(shù) 2014年19期
關(guān)鍵詞:設(shè)計(jì)模式觀察者飛翔

孟婷婷 何利力

摘要:該文探討了觀察者(Observer)設(shè)計(jì)模式的概念及在手機(jī)導(dǎo)航軟件中的應(yīng)用。通過實(shí)例證明了該模式下導(dǎo)航軟件的性能得到了進(jìn)一步的提升,提供了實(shí)現(xiàn)手機(jī)導(dǎo)航的Java程序代碼,并總結(jié)該模式在軟件設(shè)計(jì)過程中的優(yōu)點(diǎn)。

關(guān)鍵詞: Observer設(shè)計(jì)模式;軟件開發(fā);手機(jī)導(dǎo)航

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)19-4579-04

Observer Design Pattern Used in Navigation Software

MENG Ting-ting, HE Li-li

(Information College of Zhejiang University, Hangzhou 310018,China)

Abstract: This paper discusses the observer(觀察者) design pattern concept and the pattern in the mobile phone navigation software. Examples show that the performance of the model system has been further improved, this paper provides a mobile phone navigation Java code, and summarizes the advantages of the model in the software design process.

Key words: Observer design pattern; software development; mobile navigation

目前,隨著經(jīng)濟(jì)社會的發(fā)展,人們生活水平的提高,商務(wù)談判、旅游、異地探親等變得更加頻繁,手機(jī)導(dǎo)航軟件在其中發(fā)揮著舉足輕重的作用。手機(jī)導(dǎo)航軟件,在把用戶從出發(fā)地帶到目的地的過程中,通過GPS實(shí)時獲取用戶在地圖中所在的位置,以及目的地在地圖中的位置。在手機(jī)導(dǎo)航軟件的開發(fā)中,觀察者設(shè)計(jì)模式能夠使系統(tǒng)易于維護(hù)、擴(kuò)展和復(fù)用。該文主要討論的是該模式在手機(jī)導(dǎo)航軟件中的應(yīng)用,并總結(jié)該模式在軟件設(shè)計(jì)過程中的優(yōu)點(diǎn)。

1 觀察者設(shè)計(jì)模式概述

啟動導(dǎo)航,進(jìn)行導(dǎo)航,結(jié)束導(dǎo)航這些過程中往往要求在位置信息發(fā)生變化的時候,用戶交互端能夠準(zhǔn)確快捷地做出相應(yīng)的改變以便于用戶做出選擇。對于實(shí)現(xiàn)這一點(diǎn)的設(shè)計(jì)方案有很多,但是用于復(fù)雜的導(dǎo)航軟件中,例如景區(qū)內(nèi)外的多個導(dǎo)航相結(jié)合的系統(tǒng),我們就必須采用易于復(fù)用,低耦合度的設(shè)計(jì)模式。減少對象之間的耦合有利于軟件的復(fù)用,但同時設(shè)計(jì)者需要使這些低耦合度的對象之間能夠保持行動一致的協(xié)調(diào)性,保證對象間高度的協(xié)作。觀察者設(shè)計(jì)模式是行為模式的典型代表,它正符合上述的要求。

2 觀察者設(shè)計(jì)模式剖析

觀察者設(shè)計(jì)模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)上發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。觀察者模式(Observer)完美地將觀察者和被觀察的對象分離開。例如Android用戶界面可以作為一個觀察者,GPS位置信息是被觀察者,用戶界面觀察位置信息的變化,發(fā)現(xiàn)數(shù)據(jù)變化后,就相應(yīng)地調(diào)整導(dǎo)航信息并顯示在用戶界面上或者進(jìn)行語音提示。

面向?qū)ο笤O(shè)計(jì)的一個原則是:系統(tǒng)中的每個類將重點(diǎn)放在某一個功能上,而不是其他方面。一個對象只做一件事情,并且將他做好。觀察者設(shè)計(jì)模式在模塊之間劃定了清晰的界限,提高了應(yīng)用程序的可維護(hù)性和重用性。實(shí)現(xiàn)方式首先是觀察者在被觀察者那兒注冊,然后被觀察者發(fā)生變化后,向每一個在他那兒注冊的觀察者發(fā)送消息,通知他們進(jìn)行數(shù)據(jù)修改。在手機(jī)導(dǎo)航軟件中,只要位置信息發(fā)生了改變,導(dǎo)航信息以及地圖顯示信息都要做相應(yīng)的變換。

3 手機(jī)導(dǎo)航軟件中觀察者設(shè)計(jì)模式的應(yīng)用

GPS位置信息是一個被觀察者,地圖顯示是一個觀察者,導(dǎo)航信息也是一個觀察者,他們都向位置信息做了相應(yīng)注冊,當(dāng)前位置發(fā)生變化,地圖顯示收到更新,將新的位置信息展示到地圖上,導(dǎo)航信息收到更新,調(diào)用相應(yīng)的導(dǎo)航算法去判斷當(dāng)前的一些導(dǎo)航信息(轉(zhuǎn)向距離,轉(zhuǎn)向方位,是否偏航等)來進(jìn)行頁面的展示和用戶的交互,如圖1。

3.1 定義觀察者接口

//定義位置觀察者接口,聲明位置變化的更新函數(shù),當(dāng)位置發(fā)生了變化(精度,海拔, //經(jīng)度,緯度,速度,方向等),自動調(diào)用位置更新函數(shù)。

public interface LocationObserver {

void locationDataChanged(Location location);

}

3.2 定義具體的觀察者

在導(dǎo)航應(yīng)用中定義具體觀察者,當(dāng)數(shù)據(jù)發(fā)生變化,前臺頁面相應(yīng)的進(jìn)行修改或者數(shù)據(jù)變換,改變導(dǎo)航信息來與用戶進(jìn)行交互,語音提示。

例如:剛進(jìn)入系統(tǒng)的時候未獲取到位置信息,將顯示默認(rèn)地圖,定位觀察者將等待位置信息,當(dāng)捕獲了GPS之后通知所有的觀察者,定位觀察者收到通知后,首先將地圖的中心位置設(shè)置為當(dāng)前位置,然后在地圖中畫出當(dāng)前位置,展示給用戶,如圖2所示(圓圈代表定位精度);在路徑規(guī)劃的過程中,線路觀察者收到位置變化的通知后,通過計(jì)算來判斷是否偏航,是否需要重新規(guī)劃線路,如圖3所示,用戶可以通過關(guān)鍵詞搜索或者地圖點(diǎn)選來確定目的地的位置信息,然后進(jìn)行路徑規(guī)劃和引導(dǎo)。

圖2 定位觀察者 圖3 線路觀察者

public class GpsLocationObserver extends Activity implements LocationObserver {

private GpsLocationSubject gpsLS = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_item);

initViews();// 初始化頁面控件

gpsLS = GpsLocationSubject.getGpsLS();

gpsLS.register(this); // 將此頁面注冊到觀察者列表中去

}

@Override

protected void onPause() {

super.onPause();

gpsLS.unRegister(this); // 界面不可見時將其從列表中移除

}

@Override

public void locationDataChanged(Location location) {

// 觀察者得到目標(biāo)改變而傳過來的位置信息,進(jìn)行導(dǎo)航操作

gotoNav(location);

}

private void initViews() {…}

private void gotoNav(Location location) {…}

}

3.3 定義抽象主題

定義一個抽象(abstract)的位置主題,并且定義一個位置觀察者的列表,用來存放觀察位置變化的所有的位置觀察者obs,由于obs可能同時被多個觀察者調(diào)用,例如:地圖繪制我的位置的觀察者調(diào)用的同時可能根據(jù)位置進(jìn)行導(dǎo)航計(jì)算的觀察者也在進(jìn)行中,為了造成沖突,為obs加鎖,不管哪一個線程(例如線程A),運(yùn)行到這個方法時,都要檢查有沒有其它線程B(或者C、 D等)正在用這個方法,有的話要等正在使用synchronized方法的線程B(或者C 、D)運(yùn)行完這個方法后再運(yùn)行此線程A;沒有的話,直接運(yùn)行。

public abstract class LocationSubject {

protected List obs = null;

// 注冊添加觀察者

public synchronized void register(LocationObserver observer) {

if(obs!=null&&!obs.contains(observer)){

obs.add(observer); }

};

// 解除移除觀察者

public synchronized void unRegister(LocationObserver observer) {

if (obs != null && obs.contains(observer)) {

obs.remove(observer);

}};

}

3.4 定義具體主題

定義了一個具體的觀察者,此觀察者實(shí)現(xiàn)了安卓自己的位置獲取的接口,當(dāng)位置發(fā)生變化的時候,通知觀察者進(jìn)行位置更新,遍歷每一個觀察者發(fā)出位置變化的消息。

public class GpsLocationSubject extends LocationSubject implements LocationListener

{private static GpsLocationSubject subject = null;

private GpsLocationSubject() {

obs = new LinkedList();

}

//保證當(dāng)前為唯一的

public static GpsLocationSubject getGpsLS() {

if (subject == null) {

subject = new GpsLocationSubject();

}

return subject;

}

//得到手機(jī)設(shè)備gps的位置信息將位置信息通知給每個已經(jīng)注冊的觀察者

@Override

public void onLocationChanged(Location location) {

for (LocationObserver subject : obs) {

subject.locationDataChanged(location);

}}

//關(guān)閉了位置提供者

@Override

public void onProviderDisabled(String provider) {…}

//打開了位置提供者

@Override

public void onProviderEnabled(String provider) {…}

//位置提供者狀態(tài)發(fā)生變化

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {…}

}

3.5 觀察者模式的實(shí)踐

將這一設(shè)計(jì)模式應(yīng)用于導(dǎo)航實(shí)踐中,可以發(fā)現(xiàn)軟件的復(fù)用性得到了很大的提高,不過每種模式都有再進(jìn)步的空間,在手機(jī)導(dǎo)航軟件中的應(yīng)用觀察者模式只是小試牛刀,后續(xù)的研究完善才是更重要的探索。此系統(tǒng)中完成了實(shí)時位置的獲取,最佳駕車方案的路徑規(guī)劃以及完善的導(dǎo)航架構(gòu),做到了一鍵生成路徑,一鍵引導(dǎo),方便了廣大用戶,在各個模塊中都要根據(jù)位置信息來確定界面布局或者進(jìn)行相應(yīng)的計(jì)算,所以位置的實(shí)時性很重要。如圖4,只要位置信息發(fā)生了變化,影響導(dǎo)航的情況下(地圖中當(dāng)前位置,也就是起點(diǎn)與實(shí)際位置相差較大,無法使用當(dāng)前的路徑進(jìn)行導(dǎo)航)需要計(jì)算新的位置到目的地的路徑,并將地圖中的路徑進(jìn)行相應(yīng)的更新。如圖5,只要位置信息變化了,手機(jī)導(dǎo)航界面的轉(zhuǎn)向信息,轉(zhuǎn)向距離信息,目的地距離信息,下一道路信息,當(dāng)前道路信息,輔助導(dǎo)航信息都要進(jìn)行一次刷新。

圖4 路徑規(guī)劃 圖5 導(dǎo)航觀察者

4 結(jié)果分析

實(shí)踐出真知,觀察者設(shè)計(jì)模式給手機(jī)導(dǎo)航軟件的設(shè)計(jì)應(yīng)用帶來極大的方便。當(dāng)數(shù)據(jù)發(fā)生變化時,相關(guān)觀察者的數(shù)據(jù)自動更新,真正體現(xiàn)了自動實(shí)時化優(yōu)點(diǎn)。通過利用觀察者設(shè)計(jì)模式,不僅可以避免大量的重復(fù)動作,還提高了軟件的可擴(kuò)展性、可移植性以及程序的可健壯性,真正地達(dá)到了軟件的復(fù)用。此外,觀察者設(shè)計(jì)模式在手機(jī)導(dǎo)航軟件中低耦合的作用極為突出。不過,觀察者模式在手機(jī)導(dǎo)航軟件中的應(yīng)用有待進(jìn)一步的探索和研究。

參考文獻(xiàn):

[1] 張寧,王越,王東. 觀察者模式及其在軟件開發(fā)中的應(yīng)用[J].大眾科技,2008,11:35-36.

[2] 歐陽宏基,楊衛(wèi)忠,趙薔. 觀察者模式在Java事件處理中的應(yīng)用研究[J].微處理機(jī),2013,4:77-79.

[3] 張德靜. observer模式研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2005.

[4] 梁曉明.智能手機(jī)導(dǎo)航軟件界面用戶體驗(yàn)研究[D].無錫:江南大學(xué),2013.

[5] 馬越. Android的架構(gòu)與應(yīng)用[D].北京:中國地質(zhì)大學(xué),2008.

[6] 黃一青.UML在面向?qū)ο蟪绦蛟O(shè)計(jì)中的應(yīng)用[J]. 計(jì)算機(jī)與現(xiàn)代化,2008,2:67-69.

@Override

public void onProviderEnabled(String provider) {…}

//位置提供者狀態(tài)發(fā)生變化

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {…}

}

3.5 觀察者模式的實(shí)踐

將這一設(shè)計(jì)模式應(yīng)用于導(dǎo)航實(shí)踐中,可以發(fā)現(xiàn)軟件的復(fù)用性得到了很大的提高,不過每種模式都有再進(jìn)步的空間,在手機(jī)導(dǎo)航軟件中的應(yīng)用觀察者模式只是小試牛刀,后續(xù)的研究完善才是更重要的探索。此系統(tǒng)中完成了實(shí)時位置的獲取,最佳駕車方案的路徑規(guī)劃以及完善的導(dǎo)航架構(gòu),做到了一鍵生成路徑,一鍵引導(dǎo),方便了廣大用戶,在各個模塊中都要根據(jù)位置信息來確定界面布局或者進(jìn)行相應(yīng)的計(jì)算,所以位置的實(shí)時性很重要。如圖4,只要位置信息發(fā)生了變化,影響導(dǎo)航的情況下(地圖中當(dāng)前位置,也就是起點(diǎn)與實(shí)際位置相差較大,無法使用當(dāng)前的路徑進(jìn)行導(dǎo)航)需要計(jì)算新的位置到目的地的路徑,并將地圖中的路徑進(jìn)行相應(yīng)的更新。如圖5,只要位置信息變化了,手機(jī)導(dǎo)航界面的轉(zhuǎn)向信息,轉(zhuǎn)向距離信息,目的地距離信息,下一道路信息,當(dāng)前道路信息,輔助導(dǎo)航信息都要進(jìn)行一次刷新。

圖4 路徑規(guī)劃 圖5 導(dǎo)航觀察者

4 結(jié)果分析

實(shí)踐出真知,觀察者設(shè)計(jì)模式給手機(jī)導(dǎo)航軟件的設(shè)計(jì)應(yīng)用帶來極大的方便。當(dāng)數(shù)據(jù)發(fā)生變化時,相關(guān)觀察者的數(shù)據(jù)自動更新,真正體現(xiàn)了自動實(shí)時化優(yōu)點(diǎn)。通過利用觀察者設(shè)計(jì)模式,不僅可以避免大量的重復(fù)動作,還提高了軟件的可擴(kuò)展性、可移植性以及程序的可健壯性,真正地達(dá)到了軟件的復(fù)用。此外,觀察者設(shè)計(jì)模式在手機(jī)導(dǎo)航軟件中低耦合的作用極為突出。不過,觀察者模式在手機(jī)導(dǎo)航軟件中的應(yīng)用有待進(jìn)一步的探索和研究。

參考文獻(xiàn):

[1] 張寧,王越,王東. 觀察者模式及其在軟件開發(fā)中的應(yīng)用[J].大眾科技,2008,11:35-36.

[2] 歐陽宏基,楊衛(wèi)忠,趙薔. 觀察者模式在Java事件處理中的應(yīng)用研究[J].微處理機(jī),2013,4:77-79.

[3] 張德靜. observer模式研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2005.

[4] 梁曉明.智能手機(jī)導(dǎo)航軟件界面用戶體驗(yàn)研究[D].無錫:江南大學(xué),2013.

[5] 馬越. Android的架構(gòu)與應(yīng)用[D].北京:中國地質(zhì)大學(xué),2008.

[6] 黃一青.UML在面向?qū)ο蟪绦蛟O(shè)計(jì)中的應(yīng)用[J]. 計(jì)算機(jī)與現(xiàn)代化,2008,2:67-69.

@Override

public void onProviderEnabled(String provider) {…}

//位置提供者狀態(tài)發(fā)生變化

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {…}

}

3.5 觀察者模式的實(shí)踐

將這一設(shè)計(jì)模式應(yīng)用于導(dǎo)航實(shí)踐中,可以發(fā)現(xiàn)軟件的復(fù)用性得到了很大的提高,不過每種模式都有再進(jìn)步的空間,在手機(jī)導(dǎo)航軟件中的應(yīng)用觀察者模式只是小試牛刀,后續(xù)的研究完善才是更重要的探索。此系統(tǒng)中完成了實(shí)時位置的獲取,最佳駕車方案的路徑規(guī)劃以及完善的導(dǎo)航架構(gòu),做到了一鍵生成路徑,一鍵引導(dǎo),方便了廣大用戶,在各個模塊中都要根據(jù)位置信息來確定界面布局或者進(jìn)行相應(yīng)的計(jì)算,所以位置的實(shí)時性很重要。如圖4,只要位置信息發(fā)生了變化,影響導(dǎo)航的情況下(地圖中當(dāng)前位置,也就是起點(diǎn)與實(shí)際位置相差較大,無法使用當(dāng)前的路徑進(jìn)行導(dǎo)航)需要計(jì)算新的位置到目的地的路徑,并將地圖中的路徑進(jìn)行相應(yīng)的更新。如圖5,只要位置信息變化了,手機(jī)導(dǎo)航界面的轉(zhuǎn)向信息,轉(zhuǎn)向距離信息,目的地距離信息,下一道路信息,當(dāng)前道路信息,輔助導(dǎo)航信息都要進(jìn)行一次刷新。

圖4 路徑規(guī)劃 圖5 導(dǎo)航觀察者

4 結(jié)果分析

實(shí)踐出真知,觀察者設(shè)計(jì)模式給手機(jī)導(dǎo)航軟件的設(shè)計(jì)應(yīng)用帶來極大的方便。當(dāng)數(shù)據(jù)發(fā)生變化時,相關(guān)觀察者的數(shù)據(jù)自動更新,真正體現(xiàn)了自動實(shí)時化優(yōu)點(diǎn)。通過利用觀察者設(shè)計(jì)模式,不僅可以避免大量的重復(fù)動作,還提高了軟件的可擴(kuò)展性、可移植性以及程序的可健壯性,真正地達(dá)到了軟件的復(fù)用。此外,觀察者設(shè)計(jì)模式在手機(jī)導(dǎo)航軟件中低耦合的作用極為突出。不過,觀察者模式在手機(jī)導(dǎo)航軟件中的應(yīng)用有待進(jìn)一步的探索和研究。

參考文獻(xiàn):

[1] 張寧,王越,王東. 觀察者模式及其在軟件開發(fā)中的應(yīng)用[J].大眾科技,2008,11:35-36.

[2] 歐陽宏基,楊衛(wèi)忠,趙薔. 觀察者模式在Java事件處理中的應(yīng)用研究[J].微處理機(jī),2013,4:77-79.

[3] 張德靜. observer模式研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2005.

[4] 梁曉明.智能手機(jī)導(dǎo)航軟件界面用戶體驗(yàn)研究[D].無錫:江南大學(xué),2013.

[5] 馬越. Android的架構(gòu)與應(yīng)用[D].北京:中國地質(zhì)大學(xué),2008.

[6] 黃一青.UML在面向?qū)ο蟪绦蛟O(shè)計(jì)中的應(yīng)用[J]. 計(jì)算機(jī)與現(xiàn)代化,2008,2:67-69.

猜你喜歡
設(shè)計(jì)模式觀察者飛翔
觀察者
仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
“1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
飛翔吧,少年!
飛翔(上)
冷靜而又理性的觀察者——德國華人作家劉瑛訪談
交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
獨(dú)自前行 迎風(fēng)飛翔
好夢飛翔
互動式設(shè)計(jì)模式研究
香格里拉县| 武宣县| 朝阳县| 义乌市| 隆林| 昂仁县| 永定县| 开远市| 塔河县| 徐闻县| 班玛县| 神池县| 衢州市| 镇康县| 宜宾市| 炉霍县| 合阳县| 正安县| 富源县| 宝丰县| 武陟县| 平山县| 广安市| 湘潭市| 运城市| 八宿县| 大丰市| 盈江县| 桦甸市| 永平县| 绍兴县| 黄陵县| 锦州市| 陆川县| 紫阳县| 沈阳市| 招远市| 新郑市| 醴陵市| 襄城县| 大田县|