溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++如何實(shí)現(xiàn)抽象工廠

發(fā)布時(shí)間:2022-01-13 16:34:20 來源:億速云 閱讀:173 作者:iii 欄目:大數(shù)據(jù)

今天小編給大家分享一下c++如何實(shí)現(xiàn)抽象工廠的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

代碼示例

利用者代碼:

c++如何實(shí)現(xiàn)抽象工廠

這段代碼中創(chuàng)建了一個(gè)Maze對(duì)象,兩個(gè)Room對(duì)象和六個(gè)Wall對(duì)象,然后建立各個(gè)對(duì)象之間的聯(lián)系。

工廠基類

c++如何實(shí)現(xiàn)抽象工廠

測試代碼

實(shí)例中通過如下代碼將MazeGame,MazeFactory聯(lián)系在一起。

c++如何實(shí)現(xiàn)抽象工廠

派生工廠

接下來是派生工廠類,本例中一共有兩個(gè):EnchantedMazeFactory和BombedMazeFactory。工廠類的類圖如下:

c++如何實(shí)現(xiàn)抽象工廠

除了使用的工廠類不同以外,和test1完全相同。其輸出結(jié)果如下:

c++如何實(shí)現(xiàn)抽象工廠

注意觀察SetSide調(diào)用的部分。

第一次調(diào)用時(shí)接受了factory.MakeWall()構(gòu)建的Wall對(duì)象,由于這個(gè)對(duì)象沒有傳遞給其他的變量,所以wall對(duì)象的內(nèi)存管理權(quán)限應(yīng)該交給r1;第二次調(diào)用時(shí)傳遞的是aDoor對(duì)象,這個(gè)對(duì)象除了傳遞給r1以外,后面又傳遞給r2。這個(gè)aDoor的內(nèi)存應(yīng)該由誰來管理呢?

為了解決這個(gè)問題,需要重新考慮內(nèi)存管理的策略。例如所有對(duì)象的內(nèi)存都交給aMaze對(duì)象管理,其他對(duì)象之間都是參照關(guān)系。這樣當(dāng)然可以解決問題,但是比較繁瑣也不夠好玩,作者在這里采用了另外的策略:使用C++11中的shared_ptr來解決問題。

單從形式上看,作者的實(shí)現(xiàn)和《設(shè)計(jì)模式》示例代碼有以下區(qū)別:

  1. 所有的指針都被替換為自定義類型

  2. 創(chuàng)建對(duì)象是使用make_shared。

這里的自定義類型就是智能指針

所有的變化都是因?yàn)槭褂昧藄hared_ptr。

這樣操作的結(jié)果就是大大簡化了內(nèi)存管理。在作者提供的這個(gè)示例中,由于內(nèi)存管理全部交給shared_ptr進(jìn)行,不再需要顯式釋放內(nèi)存。

以上就是“c++如何實(shí)現(xiàn)抽象工廠”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI