您好,登錄后才能下訂單哦!
今天小編給大家分享一下c++如何實(shí)現(xiàn)抽象工廠的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
代碼示例
利用者代碼:
這段代碼中創(chuàng)建了一個(gè)Maze對(duì)象,兩個(gè)Room對(duì)象和六個(gè)Wall對(duì)象,然后建立各個(gè)對(duì)象之間的聯(lián)系。
工廠基類
測試代碼
實(shí)例中通過如下代碼將MazeGame,MazeFactory聯(lián)系在一起。
派生工廠
接下來是派生工廠類,本例中一共有兩個(gè):EnchantedMazeFactory和BombedMazeFactory。工廠類的類圖如下:
除了使用的工廠類不同以外,和test1完全相同。其輸出結(jié)果如下:
注意觀察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ū)別:
所有的指針都被替換為自定義類型
創(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è)資訊頻道。
免責(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)容。