<a href="http://blog.51cto.com/attachment/201206/172321415.png" target="_blank"></a>
在寫程式時,我們會經常遇到如上圖所示的一種情形——深層調用,ClassD1和ClassD2需要調用ClassA關聯的ClassX、ClassY和ClassZ等,對于這種情況,經常見到通過構造函數一層層往下傳遞做法。
這做法有什麼不好了?它不符合開閉原則,當新增一個依賴類時,就需要增加一個參數,結果會導緻參數清單膨脹,樣子也非常難看。
那究竟怎麼做更好了?對這個問題思考過很多次,但并沒有找到一個完全滿意的解決方案,針對這種情形,我主要采取兩種方法:
1.盡量讓ClassA成為一個單例,這樣ClassD要擷取ClassX等就非常友善了,即使增加一個ClassX1也非常友善,符合開閉原則,簡單明了;
2.但并不是每種情況下,都允許ClassA成為單例,這個時候采用第二種辦法,即總是通過構造函數将ClassA往下傳遞,如ClassB(ClassA*);ClassC(ClassA*);ClassD(ClassA*),這種辦法也是符合開閉原則的,再增加一個ClassX1也非常友善;
辦法是提出來了,但這并不是最優的,這種情形就如同一個公司或一個組織人數衆多,在采取以上兩個方法 之間,就好先考慮組織的扁平化,減少資訊的傳遞層次,增加傳遞效率。
本文轉自eyjian 51CTO部落格,原文連結:http://blog.51cto.com/mooon/909827,如需轉載請自行聯系原作者