亚洲熟妇av日韩熟妇在线_大陆熟妇丰满多毛xxxx_精品久久久bbbb人妻_少妇被黑人到高潮喷出白浆_亚洲精品无码久久久影院相关影片

行業(yè)動態(tài)

當(dāng)前位置:首頁>>新聞中心>>行業(yè)動態(tài) 發(fā)布時間:2017-08-17 04:59:19

工廠設(shè)計模式在多串口通信中的應(yīng)用

時間:2017-08-17 04:59:19 來源:本站 點擊數(shù):700

設(shè)計模式/軟件設(shè)計模式Oesign pattern)是軟件設(shè)計過程中的經(jīng)驗總結(jié)???/span> 以讓程序代碼易重用、易理解、更穩(wěn)定。目前總結(jié)出來的模式有23種之多,文中主要涉及工廠模式在多串口通信軟件開發(fā)中的應(yīng)用。作者針對衡器稱重系統(tǒng)中常用的儀表、一機(jī)一

秤、一機(jī)多秤等應(yīng)用場景,提出相應(yīng)的解決方案。

1.引言

在軟件開發(fā)過程中,常常會碰到相似問題 做重復(fù)的工作。如何提高效率保證代碼的可靠 性,可重用性昵?前人總結(jié)出了很多軟件開發(fā)模 式,來解決相應(yīng)的問題。文中將針對“軟件設(shè)計 模式”工廠模式”在多串口通信軟件開發(fā)中 的應(yīng)用展開描述。

2.設(shè)計模式簡介

設(shè)計模式(Oesign patten)是一套被反復(fù)使用 的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計 經(jīng)驗的總結(jié)。使用設(shè)計模式是為了重用代碼、讓 代碼更容易被他人理解、保證代碼可靠性。最早 提出設(shè)計模式思想是在1994年,由Erich Gamma 等人,在其所著的《面象對象的可復(fù)用元素》一 書中提出的??偨Y(jié)出三大類別創(chuàng)建型模式、結(jié) 構(gòu)型模式、行為型模式,六大原則(開閉原則、 里氏原則、依賴倒置原則、接口隔離原則、迪米 特法則、合成復(fù)用原則,23種設(shè)計模式俱體內(nèi) 容請參看相關(guān)書籍。本文將重點介紹:工廠設(shè)計 模式。它屬于創(chuàng)建型模式即在創(chuàng)建對象的過 程中,隱藏創(chuàng)建邏輯,這使得程序在創(chuàng)建給定實 例對象時,可以提供靈活的判斷。

3.衡器軟件中的問題

作者長期從事衡器稱重軟件的設(shè)計。在長期 的工作經(jīng)歷中,參與了很多項目,其中多數(shù)都會 用到串口通信。會遇到以下幾種典型的應(yīng)用問題:

1)在使用衡器儀表時,串口是常見的對外通 信方式。稱重儀表廠家多,型號不一,通信格式 各不相同。能不能使用統(tǒng)一的開發(fā)模式,進(jìn)行管 理,減少重復(fù)性的工作昵?

2)地磅稱重管理中,有一機(jī)一秤,也有 機(jī)多秤的模式。在多秤同時使用時,儀表型 號可能相同,也可能不同,有沒有簡潔、高效的 擴(kuò)展軟件代碼的方法昵?

4.工廠設(shè)計模式

針對上述問題,作者通過實踐和總結(jié),覺得軟件開發(fā)模式的中的工廠模式”比較適合解決 這類問題。

什么是工廠模式?顧名思義,就是客戶提 訂單,交給工廠生產(chǎn),最后得到“產(chǎn) 品”。工廠模式模擬了這個過程。“工廠模 式”分為三種子類別:簡單工廠、工廠方法、抽 象工廠。這三種方法,本質(zhì)相同,但各有其應(yīng)用 場景,簡單來說,如下:

1)簡單工廠:一個工廠生產(chǎn)多種不同產(chǎn)品。

2)工廠方法:多個工廠,每個工廠生產(chǎn)一種 產(chǎn)品。是對簡單工廠的改進(jìn),因為“簡單工 廠”不符合開閉原則”。

3)抽象工廠:多個工廠,每個工廠生產(chǎn)一種 或多種產(chǎn)品??梢愿鶕?jù)訂單需求,生產(chǎn)“產(chǎn) 品”。訂單中可能存在多種不同的產(chǎn)品”需 求,可以交給不同的“工廠生產(chǎn)”。

這三種模式都能解決衡器軟件中的儀表串口 通信問題。文中重點講解簡單工廠“抽象 工廠”這兩種模式,這兩種模式比較容易理解, 其它的模式也可依此類推。

5.面向?qū)ο蟮膶崿F(xiàn)過程

設(shè)計模式的運用與編程語言無關(guān)。作者以常 用的C++語言為例,說明面向?qū)ο蟮姆庋b過程。

首先,作者封裝了一組串口通信類,將串口 通信過程中,常用的的方法,封裝在一個類族里, 為后期模式設(shè)計提供基礎(chǔ)如圖1所示。

云網(wǎng)客1.jpg

串口類庫可根據(jù)需要不斷擴(kuò)展,封裝好后, 與下文的設(shè)計模式類隔離,減少代碼耦合。這個 類族中的底層子類,相當(dāng)于工廠”里生產(chǎn)的產(chǎn)品

1)簡單工廠的實現(xiàn)過程

簡單工廠模式如圖2所示,將產(chǎn)品”實例的創(chuàng)建放到工廠方法中完成,從而為產(chǎn)品的選擇提供靈活性。這里的產(chǎn)品就是儀表型號,工廠就是 TMeterFactory 類,其方法 CreateMeter 可以創(chuàng)建各種儀表的實例。

云網(wǎng)客2.jpg

主要部分的偽代碼如下:

#include

classTM eterfactory//儀表工廠類

{

Private:

m apm _m eter;// 管理 所有的儀表對象 public

TM eterfactory0;

ICommO bject*C reateM eter (char*strM eter- Name);//創(chuàng)建儀表實例方法

~TM eterFactoryO;//銷毀儀表類實例

};

ICommObject*TM eterFactory::CreateM eter (char*strM eterN am e)

{ //檢查儀表實例是否存在 ifm _m eter.end )!=m _m eter.find (strM eterN am e)) return m_m eter.find strM eterN am e)->second; //創(chuàng)建新的儀表實例 ICommO bject*pM eter=N ULL; if(!strcm p "X K 3190A 9",strM eterN am e)) pM eter=new TXK3190A9 0; else return NULL;

...//繼續(xù)添加代碼,創(chuàng)建其他儀表型號 m_meter.insert std ^pa ir rM eterN am e,pM eter)); return pMeter;

}

客戶端調(diào)用代碼如下 charweight[10]={0};

TMeterFactory*pFactory=new TMeterFactory;

 

ICommObject*pMeter=pFactory->CreateMe-

 

ter(“XK3190A9”);

 

strcpy(weight,pMeter->read());// 讀取重量,中間省略 open,write,close 等方法代碼

 

上述過程中,可以看到:在使用簡單工廠模式 (或其它模式) 時,并不一定能減少代碼量,但是易于后期擴(kuò)展和理解。從客戶端的調(diào)用代碼可以看出:模式提供了統(tǒng)一的接口,調(diào)用者只要給出儀表型號,就能得到相應(yīng)的類實例。實例創(chuàng)建過程封裝到其他代碼塊中,只要那部分代碼沒有問題,調(diào)用者就能得到正確的結(jié)果,相當(dāng)于黑盒操作。這種方式,適合多人分工合作,共同開發(fā)軟件。

 

(2) 抽象工廠的實現(xiàn)過程

 

簡單工廠模式適合一機(jī)一秤的稱重軟件開發(fā)。抽象工廠模式適合解決一機(jī)多秤的稱重模式。他將儀表實例創(chuàng)建過程推遲到子類中完成,從而為訂單中的多種產(chǎn)品組合提供機(jī)會。以下是一機(jī)一秤一機(jī)兩秤類圖如圖 3 所示。

云網(wǎng)客3.jpg

由上圖可以看出,每一個工廠代表一種稱重模式,可以從一機(jī)一秤,擴(kuò)展到一機(jī) n 。而每一種稱重模式中,可以用同一種型號的儀表,也可以用不同種型號的儀表組成系統(tǒng)。具

 

體實施時,可根據(jù)需求選擇。C++ 偽代碼如下: class ICommObject;

 

class IFactory // 抽象工廠

 

{

 

public:

virtual ICommObject * CreateMeter1()=0; // 創(chuàng)建儀表 1,此處為純虛方法

 

virtual ICommObject * CreateMeter2 ()=0; // 創(chuàng)建儀表 2

 

// 可以繼續(xù)添加 protected:

 

IFactroy();

 

};

 

Class TOne_pc_and_one_scale:public IFactory// 具體工廠:實現(xiàn)一機(jī)一秤功能

 

{

 

public:

 

ICommObject * CreateMeter1 () {return new TXK3190A9;}

 

};

 

Class TOne_pc_and_two_scale:public IFactroy// 具體工廠:實現(xiàn)一機(jī)兩秤功能

 

{

 

public:

 

ICommObject * CreateMeter1(){return new

 

T8142pro;}

 

ICommObject * CreateMeter2(){return new

 

XK3180;}

 

};

 

客戶端調(diào)用代碼如下: // 一機(jī)一秤調(diào)用方法

char weight_A9[10]={0};// 重量字符串

 

IFactory * pScale=new TOne_pc_and_one_scale;

 

ICommObject * pA9=pScale->CreateMeter1();

 

strcpy(weight,pA9->read());// 讀取重量到 weight

 

中,中間省略 open,write,close 等方法代碼

 

 

// 一機(jī)兩秤調(diào)用方法 char weight_8142[10]={0},weight_3180[10]={0};//

重量字符串

 

IFactory * pScale=new TOne_pc_and_two_scale; // 創(chuàng)建工廠實例

ICommObject * p3180=pScale->CreateMeter1(); ICommObject * p8142=pScale->CreateMeter2(); strcpy (weight_3180,p3180->read ());// 讀取重量

到 weight_A9 中,中間省略 open,write,close 等方法代碼

 

strcpy (weight_8142,p8142->read ()); // 讀取重量到 weight_814

 

使用抽象工廠模式,在添加新的工廠時,并不影響已有的工廠代碼,已有的代碼基本不需改動,提高了程序的穩(wěn)定性,符合

閉原則,因此成為 23 種軟件設(shè)計模式之一。

 

6.工廠模式在稱重傳感器溫度測試軟件中的應(yīng)用

 

作者在編寫 《傳感器溫度測試軟件》 的過程中,使用了數(shù)據(jù)采集板,每個板上有一個串口,多塊板同時向上位機(jī)發(fā)送傳感器的實時溫度測量數(shù)據(jù)。利用抽象工廠設(shè)計模式,很好的完成了軟件編寫。原來在其他軟件中的通信代碼 (即圖 1),移植過來使用,進(jìn)行部分?jǐn)U展,實現(xiàn)了代碼重用。軟件可以對每一個串口的通信數(shù)據(jù)和通信參數(shù),進(jìn)行單獨的管理。如下圖:

云網(wǎng)客6.jpg

7.相關(guān)問題討論

Windows 系統(tǒng)中,某個串口設(shè)備,在某一時刻,只能被一個軟件使用 (虛擬串口設(shè)備除外)。多個進(jìn)程或線程同時使用,會產(chǎn)生沖突。沖突的情況分為三種:

(1) 兩個 (或兩個以上) 不同的軟件,同時打開同一個串口

(2) 同一個軟件,運行兩次實例 (或兩次以上) 在內(nèi)存中,同時打開同一個串口

(3) 同一個軟件,運行一次,但在軟件內(nèi)部兩次(或兩次以上) 打開同一個串口

、②兩種情況涉及不同進(jìn)程之間的資源搶占的沖突,可以考慮用進(jìn)程互斥的方法解決,不屬于軟件模式的解決范疇

對于第③種情況,可用“單例模式解決軟件內(nèi)部多次、同時讀、寫同一個串口沖突的問題。

單例模式的目標(biāo)就是:每個類只能創(chuàng)建一個實例。類的構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)設(shè)為私有保護(hù)權(quán)限,類實例由其靜態(tài)成員函數(shù)創(chuàng)建。

文中的工廠模式也涉及到串口的調(diào)用,因此可能有人會問:工廠模式能否結(jié)合單例模式同時使用呢?答案是否定的。單例模式封裝的對象是串口硬件實體。本文中的工廠模式是以稱重儀表為對象,進(jìn)行封裝。兩者的出發(fā)點和角度不同,雖然都用到了串口通信,但是功能需求不同。物理串口,同一時刻,只能被一個實例使用,因此用單例模式比較合理。而稱重儀表類,則存在多臺相同型號的儀表同時使用的情況,所以需要創(chuàng)建同一個類的多個實例。這些屬于面對的編程思想,需要結(jié)合實踐去體會他們的異同。

8.總結(jié)

在軟件設(shè)計過程中,不僅衡器稱重軟件一機(jī)多秤(即一臺上位機(jī),多臺稱重儀表同時工作),可以使用工廠模式來設(shè)計,其它類似的涉及多臺儀表,多個串口同時工作的軟件,都可參考這種模式。軟件模式的使用,使代碼易于閱讀,管理,能提高代碼的重用效率。實際軟件開發(fā)中,具體使用哪種模式,是一種模式,還是多種模式混合使用?對于開發(fā)者來說,需要有一定行業(yè)經(jīng)驗,總結(jié)出用戶的需求,整理出規(guī)律性的內(nèi)容,再選擇合適開發(fā)模式,才能找到一條正確的道路。

 

 


国产疯狂伦交大片| 国产精品久久久久av福利动漫| 少妇被爽到高潮在线观看| 亚洲女毛多水多21p| 色婷婷久久综合中文久久蜜桃av| 又爽又高潮的bb视频免费看| 无码日本精品xxxxxxxxx| 国产人妖乱国产精品人妖| 国产v亚洲v天堂无码久久久| 最近免费中文字幕中文高清百度| 美女脱了内裤张开腿让男人桶网站| 中文天堂国产最新| 中文字幕亚洲乱码熟女在线| 成年性生交大片免费看| 无码高潮少妇毛多水多水免费| 久久国产精品99国产精| 亚洲熟妇无码乱子av电影| 天天做天天爱天天爽综合网| 国产精自产拍久久久久久蜜| 精品国产yw在线观看| 亚洲日韩国产一区二区三区| 亚洲香蕉成人av网站在线观看| 久久 国产 尿 小便 嘘嘘| 国产9 9在线 | 欧洲| 欧美精品久久天天躁| 中字幕人妻一区二区三区| 国产又色又爽又黄又免费| 少妇人妻诗雨系列无删减| 亚洲精品久久久久avwww潮水| 国产精品久久久久久久久久久久午衣片| 无码国产精品一区二区免费vr| 欧美人与动牲交a精品| 蜜臀av色欲a片无码精品一区| 激情亚洲一区国产精品| 国产精品国产三级国产av剧情| 久久久久亚洲av成人无码| 日本中国内射bbxx| 国产精品天天在线午夜更新| 色综合99久久久无码国产精品| 亚洲 欧美 综合 另类 中字| 久久久久久国产精品免费免费|