若是你有一個數組,其中的元素各自表明不一樣東西,好比你有一個html
QList<QString> strList;
其中strList[0]表明選手姓名,strList[1]表明選手家庭住址,很顯然這個數組表示的含義已經太多,你須要用對象來替換數組,而且對於數組中的每一個元素,以一個字段來表示。數組
數組是一種常見的用以組織數據的數據結構,不過,它們應該只用於「以某種順序容納一組類似對象」。對於上面的例子你能夠看到一個數組容納了不一樣對象,這會給使用數組的客戶帶來麻煩,由於他們很難記住數組的第一個元素是姓名,第二個元素是家庭住址。對象就不一樣了,你能夠運用字段名稱和函數名稱來表達這樣的信息,你不須要死記硬背更加不須要依賴註釋,並且使用對象的好處更是可讓你使用Move Method給他添加跟數據有關的行爲讓這個類自己愈來愈有魅力。數據結構
例子:app
QList<QString> row; row.append("Livepool"); row.append("China"); QString name = row[0]; QString nation = row[1];
這個數組有兩個元素,其中第一個元素保存姓名,第二個元素保存國籍,很顯然這樣寫,會困擾客戶,因此咱們須要重構,首先咱們聲明一個類用來作數組轉移函數
class Performance { public: QList<QString> m_data; };
首先咱們先把這個數組聲明爲public,放心,這只是暫時的,後期咱們會把他設爲private : ) ,如今咱們要找到建立和訪問數組的地方,在建立地點,咱們將他改成下面代碼測試
Performance row; row.m_data.append("Livepool"); row.m_data.append("China"); QString name = row.m_data[0]; QString nation = row.m_data[1];
咱們已經完成了第一步,已經把這個新建類開始引入了,別急,重構就是一步一步慢慢來,能夠保證不會容易出錯。接下來咱們要爲數組元素逐一加上有意義的設值和取值函數,首先咱們從姓名開始spa
class Performance { public: QString name() const { return m_data[0]; } void setName(const QString &value) { m_data[0] = value; } };
而後修改使用row對象的代碼,讓他們轉而使用這些函數code
row.setName("Livepool"); row.m_data[1] = "China"; QString name = row.name(); QString nation = performance.m_data[1];
接下來咱們如法炮製第二個元素,最終代碼爲orm
class Performance { public: QString nation() const { return m_data[1]; } void setNation(const QString &value) { m_data[1] = value; } }; row.setName("Livepool"); row.setNation("China"); QString name = row.name(); QString nation = row.nation();
處理完全部元素以後咱們就能夠放心的把字段改成private了htm
private: QList<QString> m_data;
如今咱們完成了重構最重要的部分----接口,可是咱們還要進行替換對象內數組的過程,我能夠針對每一個數組元素,在類中新建一個類型至關的字段,而後修改訪問數組元素的訪問函數,令他直接訪問新字段,從而徹底擺脫對數組的依賴。
class Performance { public: QString name() const { return m_name; } void setName(const QString &value) { m_name = value; } private: QString m_name; };
待全部元素處理完畢以後,咱們就能夠將數組從Performance類中刪除了。