簡單工廠模式與純虛函數的應用

先簡單對虛函數與純虛函數做一下介紹:
兩者都是爲了解決程序的動態多態問題而設計的所以都可以達到對函數運行多態問題的解決,另外值得一提的是兩者的虛析構函數與純虛析構函數的定義將使派生類中的析構函數也都爲虛析構函數,由此可實現析構函數調用時的多態。下面說兩者的不同之處。
虛函數是處於一個可以實例化對象的類中,而純虛函數則是處於一個不可以實例化對象的抽象類中,其派生類只有把所有的純虛函數都重載之後纔可以實例化對象。在虛函數中有其獨特的性質,虛函數是動態綁定的基礎且必須是非靜態的成員函數,實現多態處理的問題是:如果需要通過基類的指針指向派生類的對象,並訪問某個與基類同名的成員函數,那麼首先在基類中將這個同名函數說明爲虛函數,這樣依據賦值兼容規則向上造型就可以實現運行過程多態,這一點純虛函數也是可以做到的,在這裏只是稍微提一下而已。虛函數因爲是動態綁定所以一般不做爲內聯函數處理,不過將其聲明爲內聯函數也不會出錯。若派生類中有函數與基類中的虛函數意義相同時則這個函數被默認爲是虛函數,且覆蓋掉基類的虛函數,不過僅僅是覆蓋想要訪問仍然可以用類作用域符號進行訪問。
純虛函數簡單來說就是一個抽象類,不可實例化對象,他是給類消費者提供一個規範唯一的藉口;其中的所有數據與成員函數都需要經過派生類進行實現 纔可以。
下面來說說簡單工廠模式,這種模式將工作分爲兩部分,一是生產類,二是消費類。對消費類而言他知道他所需要的功能是怎樣的,也就是說他所要的就是可以實現他的目的接口,而不管這功能具體是怎樣實現的。相當於他提供給生產類了一套標準接口;而對生產類來說它需要根據各類的接口與消費者要求的接口設計出一個特別的類將兩者聯繫起來實現相應的功能。由此可知當類的種類比較多時這種方法就會出現問題,在這裏我們不談這個問題。下面看一個例子來感受一下工廠模式這裏寫圖片描述!
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這是一個簡單的工廠模式,其中定義了正方體,球體,圓柱體三個對象,利用抽象類將實現幾何體面積、體積的計算函數和有關數據進行聲明,此處便是純虛函數的應用。接着又定義了一個CountFactory類此類便是將其他類進行整合處理並向消費類提供接口的關鍵類。從程序62行到程序100行可以看到這個工廠類的實現,是根據情況進行調用相關類對象的。這其中有一點是值得一提的,在滿足情況時調用對應的類創建對象,但是當這個工廠類中的此成員函數調用完之後此臨時創建的對象就會被析構掉,如此就出現程序運行錯誤。我的解決方法是:將此被創建的對象命名爲static型的保證此對象的生存期不侷限在工廠類的成員函數中。
以上是對於生產類來說的,而對於消費類來說藉口也是他定義的,那麼他只用根據自己預先設想好的方法去編寫函數即可。以上便是我對簡單工廠模式的理解。

發佈了28 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章