最顯著的缺點(diǎn)之一是這個(gè)方法不能真正的擴(kuò)展。假如要為我們的 form 引入一個(gè)新的幾何外形(比如,“五邊形”),我們必須進(jìn)入并修改 getArea() 方法的源代碼。不過可擴(kuò)展性是個(gè)獨(dú)立的考慮因素;在本文中,我們把重點(diǎn)放在實(shí)現(xiàn)幾何外形所造成的錯(cuò)誤的易受性上。我會(huì)在以后的文章中回到關(guān)于可擴(kuò)展性的問題上來。
假如我們?cè)诔绦蚱渌糠謽?gòu)造了一個(gè)新的 Form 對(duì)象,如下所示,請(qǐng)考慮將會(huì)發(fā)生什么情況:
很多其它相似的錯(cuò)誤也可能在上述代碼中產(chǎn)生。if-then-else 代碼塊可能會(huì)偶然遺漏一句分句,導(dǎo)致類型與那句分句相對(duì)應(yīng)的所有 Form 都被錯(cuò)誤地處理了。此外,因?yàn)?impostor type 在字段中只是一個(gè) String,所以它可能會(huì)被意外或惡意地修改。