999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種二階構(gòu)造設(shè)計(jì)模式的對(duì)象構(gòu)造新方法

2020-07-23 06:27:48崔群超荊文芳
現(xiàn)代電子技術(shù) 2020年4期

崔群超 荊文芳

摘? 要: 為保證在業(yè)務(wù)層面對(duì)象構(gòu)造的合法性,避免產(chǎn)生半成品對(duì)象,文中提出一種二階構(gòu)造設(shè)計(jì)模式的對(duì)象構(gòu)造設(shè)計(jì)方法。首先對(duì)對(duì)象構(gòu)造的過(guò)程進(jìn)行了認(rèn)知與分析,指出了在構(gòu)造對(duì)象過(guò)程中業(yè)務(wù)層面構(gòu)造失敗會(huì)產(chǎn)生半成品對(duì)象,在此基礎(chǔ)上提出了二階構(gòu)造的設(shè)計(jì)流程,針對(duì)業(yè)務(wù)層面對(duì)象構(gòu)造存在不成功的情況,采用在第二階段來(lái)構(gòu)造,并判斷構(gòu)造是否成功,以此來(lái)避免半成品對(duì)象的產(chǎn)生,使對(duì)象構(gòu)造合法與否能夠被設(shè)計(jì)者直接判斷,最后給出了對(duì)該設(shè)計(jì)模式的名稱(chēng)、問(wèn)題、解決方案、效果四個(gè)基本要素的總結(jié)。該模式設(shè)計(jì)簡(jiǎn)單、使用方便,可有效避免半成品對(duì)象的產(chǎn)生,可以為軟件質(zhì)量的提高帶來(lái)新的可復(fù)用方法。

關(guān)鍵詞: 對(duì)象構(gòu)造; 二階構(gòu)造; 模式設(shè)計(jì); 業(yè)務(wù)層面; 半成品對(duì)象; 參數(shù)設(shè)定

中圖分類(lèi)號(hào): TN911?34; TP311.11? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào): 1004?373X(2020)04?0157?03

An object construction new method for second?order structural design pattern

CUI Qunchao1,2, JING Wenfang1

(1. National Time Service Center of China, Chinese Academy of Sciences, Xian 710600, China;

2. University of Chinese Academy of Sciences, Beijing 100049, China)

Abstract: An object construction design method for the second?order structural design pattern is proposed to ensure the legitimacy of object construction at the business level and avoid the generation of semi?finished objects. The process of object construction is cognized and analyzed, which indicates that the failure of business?level construction in the process of object construction can produce semi?finished objects. On this basis, the design flow of second?order construction is proposed. In the case of the unsuccessful object construction at the business level, it is constructed at the second stage and judged whether the construction is successful, so as to avoid the generation of semi?finished objects. The designer can directly judge the object construction is legal or not, and the summary of the four basic elements of name, problem, solution, and effect of the design pattern is given. This mode is simple in design and prone to use, which can effectively avoid the generation of semi?finished objects and bring new reusable methods for the improvement of software quality.

Keywords: object construction; second?order construction; pattern design; business level; semi?finished object; parameter setting

0? 引? 言

設(shè)計(jì)模式是描述一個(gè)不斷重復(fù)出現(xiàn)的問(wèn)題以及對(duì)該問(wèn)題的核心解決方案,常用于軟件系統(tǒng)的建模過(guò)程,以提高軟件系統(tǒng)的設(shè)計(jì)質(zhì)量、可重用性及研發(fā)效率[1?5]。常見(jiàn)的設(shè)計(jì)模式[6]有 Singleton Command 等23種,且經(jīng)過(guò)長(zhǎng)期應(yīng)用與改進(jìn),設(shè)計(jì)模式已經(jīng)成為一種軟件設(shè)計(jì)的標(biāo)準(zhǔn)化模式,并成為軟件工程領(lǐng)域的研究熱點(diǎn)[7?9]。設(shè)計(jì)模式提供了一種封裝設(shè)計(jì)知識(shí)的方法,這些設(shè)計(jì)知識(shí)為標(biāo)準(zhǔn)的面向?qū)ο筌浖_(kāi)發(fā)問(wèn)題提供了解決方案[10]。對(duì)象是面向?qū)ο蠹夹g(shù)的核心,對(duì)象業(yè)務(wù)層面的合法構(gòu)造對(duì)面向?qū)ο蠹夹g(shù)的應(yīng)用至關(guān)重要,設(shè)計(jì)模式的正式提出者之一Erich Gamma 認(rèn)為設(shè)計(jì)模式并不是絕對(duì)的,在實(shí)踐過(guò)程中,還必須發(fā)現(xiàn)和整理使用過(guò)的設(shè)計(jì)模式,并記錄下來(lái),以提供新的軟件設(shè)計(jì)模式。本文提出一種新的對(duì)象構(gòu)造模式,該模式可以保證在對(duì)象業(yè)務(wù)層面構(gòu)造不合法時(shí)返回空,能夠方便且有效地提高對(duì)象構(gòu)造的質(zhì)量,使軟件設(shè)計(jì)更加高效。

1? 半成品對(duì)象

如圖1所示,面向?qū)ο笤O(shè)計(jì)中,構(gòu)造函數(shù)aCreatObject創(chuàng)建對(duì)象,首先給aProgramLevel發(fā)送evaluateFirst請(qǐng)求,進(jìn)行賦值,然后aCreatObject發(fā)送請(qǐng)求到aBusinessLevel申請(qǐng)內(nèi)存,最后aCreatObject給aProgramLevel發(fā)送evaluateSecond請(qǐng)求,進(jìn)行最后賦值。以C++語(yǔ)言為例,正常情況下,類(lèi)的構(gòu)造函數(shù)會(huì)合法地執(zhí)行完圖1的初始化操作;但是當(dāng)業(yè)務(wù)層面的操作,比如申請(qǐng)內(nèi)存失敗的時(shí)候,構(gòu)造對(duì)象此時(shí)不能夠提供足夠的內(nèi)存給其他業(yè)務(wù)邏輯使用,但是得到的對(duì)象依舊可以使用,卻是一個(gè)非法對(duì)象,此時(shí)稱(chēng)此非法對(duì)象為半成品對(duì)象。

以申請(qǐng)CPU資源可能失敗為例,給出可能造成半成品對(duì)象的類(lèi)semiFinishedObj偽代碼如下。

class semiFinishedObj

{

protected:

void parameterSetting();? ? ? ? ? ? ? ? ? ? ? //軟件參數(shù)設(shè)置

void interfaceSetting();? ? ? ? ? ? ? ? ? ? ? ?//軟件界面設(shè)置

void applyCPUResources();

//為AI識(shí)別算法recognizeAlgorithm()申請(qǐng)CPU資源,且可能失敗

public:

semiFinishedObj()

{

parameterSetting();

applyCPUResources();

interfaceSetting();

}

void recognizeAlgorithm()? ? ? ? ? ? ? ? ? ? ? ?//AI識(shí)別算法

{

//other operation

applyCPUResources();

//other operation

}

};

在類(lèi)semiFinishedObj的構(gòu)造函數(shù)semiFinishedObj中,首先調(diào)用操作parameterSetting初始化軟件參數(shù),此處不會(huì)發(fā)生異常;然后調(diào)用操作applyCPUResources為AI識(shí)別算法recognizeAlgorithm申請(qǐng)CPU資源;最后調(diào)用操作interfaceSetting初始化軟件界面設(shè)置,此處不會(huì)發(fā)生異常。在applyCPUResources操作中,當(dāng)CPU資源不夠時(shí),構(gòu)造的對(duì)象在業(yè)務(wù)層面不合法,不能為操作recognizeAlgorithm提供足夠的CPU資源,而這種情況只有當(dāng)對(duì)象調(diào)用操作recognizeAlgorithm后才知道,如果這種操作是在用戶(hù)使用產(chǎn)品的過(guò)程中才被調(diào)用,將會(huì)對(duì)產(chǎn)品造成很大損失。在工程實(shí)踐中,構(gòu)造函數(shù)一般非常復(fù)雜,半成品對(duì)象一般非常難以調(diào)試,必須引起設(shè)計(jì)者的重視。

2? 二階構(gòu)造模式的設(shè)計(jì)

面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)以對(duì)象為核心[11],程序由一系列對(duì)象組成,每個(gè)對(duì)象都有自己的數(shù)據(jù)和操作。因此,構(gòu)造出設(shè)計(jì)者預(yù)想的對(duì)象就變得尤為重要。

2.1? 二階構(gòu)造設(shè)計(jì)流程

為了從根本上杜絕半成品對(duì)象,本文提出了在對(duì)象構(gòu)造過(guò)程時(shí),采用二階構(gòu)造模式。二階構(gòu)造核心將構(gòu)造對(duì)象過(guò)程一分為二,與系統(tǒng)資源無(wú)關(guān)的程序?qū)用娴某跏蓟僮髟诘谝浑A段完成,與系統(tǒng)資源相關(guān)的業(yè)務(wù)層面的初始化操作在第二階段完成。與資源無(wú)關(guān)的操作為不可能出現(xiàn)異常情況的操作,如設(shè)置非指針成員變量的值為初始值;與資源相關(guān)的操作為非常可能出現(xiàn)異常的情況,如申請(qǐng)內(nèi)存、訪問(wèn)文件、申請(qǐng)CPU資源等。

二階構(gòu)造流程圖如圖2所示。第一階構(gòu)造函數(shù)采用面向?qū)ο笳Z(yǔ)言提供的構(gòu)造函數(shù),可以將和資源無(wú)關(guān)的操作放在第一階段構(gòu)造函數(shù)中;第二階段構(gòu)造對(duì)象使用普通的成員函數(shù),可以將系統(tǒng)的資源申請(qǐng)、打開(kāi)網(wǎng)絡(luò)等可能導(dǎo)致初始化失敗的操作放到第二階段的普通成員函數(shù)中。如果資源申請(qǐng)成功,則返回預(yù)定義對(duì)象;如果資源申請(qǐng)失敗,則首先刪除半成品對(duì)象,然后返回空指針。

2.2? 二階構(gòu)造結(jié)構(gòu)

二階構(gòu)造的類(lèi)的結(jié)構(gòu)圖如圖3所示。

在類(lèi)TWoPhaseCons中定義NewInstance操作,用戶(hù)只能通過(guò)TwoPhaseCons的NewInstance創(chuàng)建TwoPhaseCons的一個(gè)實(shí)例。注意類(lèi)TwoPhaseCons的構(gòu)造函數(shù)是私有的,試圖直接以操作TwoPhaseCons實(shí)例化類(lèi)TwoPhaseCons的用戶(hù)將得到一個(gè)編譯時(shí)的錯(cuò)誤信息。

2.3? 二階構(gòu)造具體設(shè)計(jì)

根據(jù)圖2和圖3,可以將二階構(gòu)造設(shè)計(jì)的關(guān)鍵代碼表述如下。

class TwoPhaseCons

{

private:

TwoPhaseCons()? ? ? ? ? ? ? ? ? ? ? ? ?//第一階段構(gòu)造函數(shù)

{

}

bool construct()? ? ? ? ? ? ? ? ? ? ? ? ? //第二階段構(gòu)造函數(shù)

{

return true;

}

public:

static TwoPhaseCons* NewInstance();? ? ?//對(duì)象創(chuàng)建函數(shù)

};

TwoPhaseCons* TwoPhaseCons::NewInstance()

{

TwoPhaseCons* ret = new TwoPhaseCons();

//若第二階段構(gòu)造失敗,返回 NULL

if( !(ret && ret?>construct()) )

{

delete ret;

ret = NULL;

}

return ret;

}

在需要對(duì)象的地方,調(diào)用公有靜態(tài)成員函數(shù)TwoPhaseCons::NewInstance,此時(shí)在堆空間先申請(qǐng)一片內(nèi)存空間,如果堆內(nèi)存空間充足,當(dāng)前對(duì)象的第一階段構(gòu)造函數(shù)TwoPhaseCons會(huì)執(zhí)行成功,之后執(zhí)行第二階段的普通成員函數(shù)construct。通過(guò)if函數(shù)中的短路規(guī)則實(shí)現(xiàn)如下:如果都創(chuàng)建成功,則直接返回,此時(shí)得到可用的合法對(duì)象;否則銷(xiāo)毀在堆空間中的生成的半成品對(duì)象,將返回值設(shè)置為空,并返回空,此時(shí)無(wú)法創(chuàng)建合法的可用對(duì)象。可以通過(guò)公有靜態(tài)成員函數(shù) NewInstance返回值為空,判斷當(dāng)前由于業(yè)務(wù)邏輯問(wèn)題無(wú)法得到合法可用的對(duì)象。如此便從本質(zhì)上杜絕了半成品對(duì)象的產(chǎn)生,二階構(gòu)造的意義在于得到合法可用的對(duì)象或者返回空對(duì)象。

2.4? 二階構(gòu)造基本要素

合理的設(shè)計(jì)模式能夠有效改善軟件設(shè)計(jì)和程序代碼質(zhì)量[12],設(shè)計(jì)模式具有4個(gè)基本要素,即模式名稱(chēng)、問(wèn)題、解決方案、效果。二階構(gòu)造設(shè)計(jì)模式4個(gè)基本要素定義如下:

1) 模式名稱(chēng):TwoPhaseCons。

2) 問(wèn)題:當(dāng)構(gòu)造函數(shù)中有資源相關(guān)的業(yè)務(wù)邏輯方面的初始化時(shí),如申請(qǐng)內(nèi)存、打開(kāi)文件或網(wǎng)絡(luò)、申請(qǐng)CPU資源等,可能不會(huì)成功,此時(shí)應(yīng)該使用二階構(gòu)造設(shè)計(jì)模式。

3) 解決方案:第一階構(gòu)造采用類(lèi)的程序?qū)用娴臉?gòu)造函數(shù),首先進(jìn)行資源無(wú)關(guān)初始化,第二階構(gòu)造采用普通成員函數(shù),一般命名為construct,之后進(jìn)行業(yè)務(wù)邏輯層面的資源相關(guān)初始化,最后兩者函數(shù)設(shè)置為非私有、并在公有靜態(tài)成員函數(shù)中被調(diào)用,公有靜態(tài)成員函數(shù)一般命名為NewInstance。

4) 效果:使用二階構(gòu)造設(shè)計(jì)模式可以杜絕半成品的產(chǎn)生,同時(shí)使構(gòu)造函數(shù)構(gòu)造過(guò)程更加清晰。在實(shí)際工程中,對(duì)象一般非常大,其不適合放在有限的棧空間中,更應(yīng)該放到堆空間里面,而二階構(gòu)造設(shè)計(jì)模式只能在堆空間創(chuàng)建對(duì)象,這恰好非常適合工程開(kāi)發(fā),當(dāng)然對(duì)于初學(xué)者應(yīng)該要注意分清資源無(wú)關(guān)和資源相關(guān)的初始化,這需要一定的工程經(jīng)驗(yàn)。

3? 結(jié)? 語(yǔ)

在對(duì)象構(gòu)造過(guò)程中,業(yè)務(wù)層面的構(gòu)造容易失敗,最終結(jié)果導(dǎo)致構(gòu)造的對(duì)象為不合法的半成品對(duì)象。本文提出一種新的對(duì)象構(gòu)造設(shè)計(jì)模式,將對(duì)象構(gòu)造分為兩階段,第一階段構(gòu)造資源無(wú)關(guān)的部分,第二階段構(gòu)造資源相關(guān)的部分。該方法將半成品對(duì)象的發(fā)現(xiàn)由類(lèi)的使用者提前到類(lèi)的設(shè)計(jì)者,能夠有效提高軟件設(shè)計(jì)質(zhì)量和效率,同時(shí)在堆空間申請(qǐng)對(duì)象,更符合工程實(shí)踐。

參考文獻(xiàn)

[1] 孫陳飛,徐駿善.設(shè)計(jì)模式在地鐵自動(dòng)售票機(jī)軟件中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2012,32(z2):116?118.

[2] 曾一,周吉,孫政,等.支持MDA的設(shè)計(jì)模式建模與模型轉(zhuǎn)換方法研究[J].計(jì)算機(jī)工程與應(yīng)用,2012,48(1):76?80.

[3] 肖卓寧,何锫,陳俊旭.設(shè)計(jì)模式變體的描述與驗(yàn)證[J].計(jì)算機(jī)應(yīng)用研究,2017,34(6):1762?1765.

[4] 楊喆,馬衛(wèi)華,馬穎勁,等.設(shè)計(jì)模式在地面測(cè)發(fā)控軟件中的應(yīng)用[J].航天控制,2014,32(2):91?96.

[5] 金建剛,包曉安.自適應(yīng)軟件設(shè)計(jì)模式探討[J].樂(lè)山師范學(xué)院學(xué)報(bào),2014,29(5):28?32.

[6] 何炳林.設(shè)計(jì)模式在燃料電池測(cè)試系統(tǒng)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2014,37(22):153?156.

[7] 申新鵬,姚俊松,肖光雁.基于動(dòng)態(tài)領(lǐng)域模型的頁(yè)面設(shè)計(jì)模式[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(6):2260?2264.

[8] 彭世康,周逢權(quán).新的設(shè)計(jì)模式?數(shù)組工廠和數(shù)組原型模式[J].計(jì)算機(jī)應(yīng)用,2012,32(z2):107?112.

[9] 肖卓寧,何锫,黎妍.基于設(shè)計(jì)模式角色的附加關(guān)系檢測(cè)研究[J].計(jì)算機(jī)應(yīng)用研究,2015,32(7):2042?2045.

[10] 楊翼.設(shè)計(jì)模式在航空公司電子客票對(duì)賬程序中的應(yīng)用[J].現(xiàn)代電子技術(shù),2011,34(22):108?111.

[11] 張海藩,呂云翔.軟件工程[M].4版.北京:人民郵電出版社,2013.

[12] 劉偉,李雅琎,胡志剛.設(shè)計(jì)模式對(duì)軟件可維護(hù)性影響的定量研究[J].軟件導(dǎo)刊,2016,15(12):95?97.

主站蜘蛛池模板: 国产va在线观看| 日本少妇又色又爽又高潮| 熟妇丰满人妻av无码区| 爆乳熟妇一区二区三区| 国产成人综合亚洲欧美在| 伊人色综合久久天天| 亚洲精品爱草草视频在线| 国产亚洲精品97在线观看| 亚洲国产综合自在线另类| 无码中字出轨中文人妻中文中| 激情五月婷婷综合网| 91外围女在线观看| 18黑白丝水手服自慰喷水网站| 日韩精品专区免费无码aⅴ| 亚洲自偷自拍另类小说| 久久婷婷国产综合尤物精品| 99久久精品视香蕉蕉| 国产午夜福利亚洲第一| 亚洲第一极品精品无码| 中文国产成人精品久久| 欧美精品啪啪| 强奷白丝美女在线观看| 亚洲 日韩 激情 无码 中出| 伊人91在线| 成人在线观看不卡| 国产日本一区二区三区| 日本午夜影院| 亚洲视频黄| 欧美精品v欧洲精品| 国产AV毛片| 日本一本正道综合久久dvd| 国产精品女在线观看| 国产高颜值露脸在线观看| 狠狠干综合| 91高清在线视频| 日韩欧美综合在线制服| 国产精品主播| 国模粉嫩小泬视频在线观看| 国产精品亚洲精品爽爽| 精品久久综合1区2区3区激情| 美女无遮挡免费网站| 毛片在线区| 国产一二三区在线| 五月婷婷精品| 中文成人在线视频| 日本亚洲国产一区二区三区| 在线免费不卡视频| 经典三级久久| 久久久久亚洲av成人网人人软件| 女人18毛片久久| 久久不卡精品| 999在线免费视频| 国产成人高精品免费视频| 亚洲第一视频区| 亚洲成人在线网| 97精品伊人久久大香线蕉| 五月激情婷婷综合| 26uuu国产精品视频| 国模沟沟一区二区三区 | 99久久人妻精品免费二区| 国产精品极品美女自在线网站| 老司机精品久久| 欧美综合在线观看| 久久久久国产精品免费免费不卡| 色欲色欲久久综合网| 国产精品lululu在线观看| 亚洲国产精品人久久电影| 色噜噜在线观看| 99国产精品免费观看视频| 亚洲女同欧美在线| 国产午夜看片| 国产在线第二页| 亚洲一区二区无码视频| 婷婷综合在线观看丁香| 欧美一级大片在线观看| 免费可以看的无遮挡av无码| 性网站在线观看| 欧美激情第一区| 性网站在线观看| 久久精品丝袜| 国产高清在线精品一区二区三区| 成人在线第一页|