用類替換型別碼

2021-05-04 18:53:53 字數 894 閱讀 1954

在實際程式設計中,經常會遇到一些這樣的問題:對於一類事物,經過會有一些不變的常量。例如:季節有春夏秋冬,方向有東西南北,狀態有一二三四等等。通常的解決辦法是使用型別碼:也就是通常所說的類常量。

對於這種解決方法,存在者許多問題。例如:型別不安全、錯誤的賦值等。可以使用【用類代替型別碼】重構來解決這類問題。

先簡單介紹一下【用類代替型別碼】重構:

接下來就具體介紹一下【提取方法】重構的實施過程。

為型別碼建立乙個新類,並且這個類中持有乙個與型別碼匹配的字段。並為這個字段提供getter方法。同時還需要一組靜態變數,這些變數包括了所有可能的新類的例項。提供乙個靜態方法,接收乙個型別碼的引數並返回乙個合適的類例項。

使用新類來改變原有類的實現。

編譯並測試。

為原類中每個使用型別碼的方法建立乙個使用新型別的方法,並用新方法代替原方法。

修改客戶程式,使用新介面。

每次修改客戶程式後都進行編譯和測試。

刪除使用型別碼的舊方法,並且刪除型別碼。

編譯並測試。

現在給出乙個簡單的重構過程來加深理解。

首先為型別碼建立乙個新類bloodgroup。

然後用新類中的型別碼替換person類中的型別碼。

現在需要在執行時檢查bloodgroup型別,為了能夠從這個變化中真正的得到好處,需要讓person類的客戶程式使用bloodgroup型別來代替原有的整數型別。為person類新增使用bloodgroup型別的建構函式和getter/setter方法。

如果沒有客戶程式使用bloodgroup中的getcode()和code()方法,可以將其設定為private。

重構結束!

最後總結一下【用類替換型別碼】的優缺點:

優點:更好的避免非法賦值和比較。

缺點:比使用不安全型別要求更多的**。

3 13 以類取代型別碼

源 1 include 2 include 3 4class student512 13int getid 1417 void setid int id 18 2122 qstring getname 2326 void setname qstring name 2730 31int getstat...

用tr進行替換

tr只能通過stdin 標準輸入 而無法通過命令列引數來接受輸入 tr options set1 set2將來自stdin的輸入字元從set1對映到set2,然後將輸出寫入stdout 標準輸出 set1和set2是字元類或字符集。如果兩個字符集的長度不相等,那麼set2會不斷重複其最後乙個字元,直...

元素型別劃分 替換元素 非替換元素

根據元素的顯示 能不能在同一行 型別劃分 1.1塊元素又名塊級元素 block element 其特點是 總是在新行上開始 高度,行高以及外邊距和內邊距都可控制 寬度預設時,它佔他父元素寬度的100 除非設定乙個寬度。它可以容納內聯元素和其他塊元素 1.2常用的塊元素 address 位址 bloc...