的「同義詞」爲了舉例,我有一個代表WAV聲音文件的類WAV
。爲了方便起見,我需要添加一個名爲WaveformAudioFile
的類,它具有完全相同的功能。類別
無論可能的設計/風格問題,整合新班級的適當方法是什麼?通過使用擴展(沒有添加任何東西),通過使用通用接口或其他東西?
編輯:進一步思考,如果要考慮設計會有避免冗餘代碼的替代方案嗎?我的意思是如果有幾個類,編寫接口會很麻煩。某種可用於初始化的模式。屬性?
的「同義詞」爲了舉例,我有一個代表WAV聲音文件的類WAV
。爲了方便起見,我需要添加一個名爲WaveformAudioFile
的類,它具有完全相同的功能。類別
無論可能的設計/風格問題,整合新班級的適當方法是什麼?通過使用擴展(沒有添加任何東西),通過使用通用接口或其他東西?
編輯:進一步思考,如果要考慮設計會有避免冗餘代碼的替代方案嗎?我的意思是如果有幾個類,編寫接口會很麻煩。某種可用於初始化的模式。屬性?
1.從設計的角度來看,如果你想要你的類扮演一個特定的角色,那麼去接口。
2.如果你有行爲,不斷變化,則其更好地它們封裝在任何抽象類或接口,然後擴展或實現其指定某些功能。
////////////////////////////////////////// 編輯: //////////////////////////////
我想你是指DRY原理(不要重複自己) ,根據這個原則,它更好地保持您的信息和行爲在單一的可感知的地方。
但是,如果對於同一功能,行爲對於不同的類是不同的。
對於例如:
考慮Painting
如與paint() Method
一個類。
現在
paint()方法可以撫摸,滑翔,陰影等方式做這件事的。
然後它的更好地將該方法封裝到抽象類或接口中。
public interface Paint{
paintDoIt(String style);
}
其不是關於一個無聊的工作,而是靈活性,不必更改而不觸及了太多的類和不破壞代碼的能力。
只有一件事是軟件工程中的一個常數,那就是CHANGE
。
所以我們需要採納它。
我幫你找到2號。像模板模式。如果你願意給我更多的想法,我已經加入了這個問題。 – 2012-07-20 05:51:44
我編輯了我的答案瞭解更多詳情..見編輯部分 – 2012-07-20 06:05:00
太好了。如果有人像你一樣「畫」出來的東西,我很感激。它提供了一些指導方針。 – 2012-07-20 06:08:23
使用共同的interface
並在兩個類中實現它。一個主要的好處是你的WAVE,然後所有的課程都可以擴展任何其他課程。
謝謝。我已經增加了更多的問題。 – 2012-07-20 05:52:11
從我的角度來看,接口是最好的解決方案。爲實現此類功能的類聲明一個通用接口,並使用此接口而不是直接類類型定義。
例如:
ISoundFile mySoundFile = getSoundFile();
哪裏ISoundFile
是你聲明的接口。
謝謝。我已經加入了這個問題。 – 2012-07-20 05:52:00
只需添加它,因爲它可能會感興趣的人。我想過另一種解決方案,那就是簡單地使用包裝類:)。
我更喜歡界面來定義合同。我通常將子類型視爲實現細節以幫助「代碼重用」。 – 2012-07-20 05:35:48