一、好的設計模塊與壞的設計模塊java
- 是否隱藏內部數據和其餘實現細節
- API與實現,清晰隔離開
- 模塊之間經過API通訊
- 信息隱藏或封裝是軟件設計的基本原則之一
二、信息隱藏很是重要數組
- 能夠有效地解除系統各個模塊之間的耦合關係
- 使得各個模塊獨立開發、測試、優化、使用、理解、修改
- 加快系統開發速度
- 減小維護負擔
三、信息隱藏自己不會帶來好的性能,可是能夠有效調節安全
- 一旦系統完成,能夠分模塊性能測試,肯定影響性能模塊,單獨優化
四、信息隱藏提升了軟件的可重用性性能
- 下降了構建大型系統風險
- 即便整個系統不可用,有些獨立模塊也是可用的
五、java 提供了許多機制來協助隱藏信息測試
- 訪問控制,決定了類、接口和成員的可訪問性
- 實體的可訪問性由其聲明所在的位置,以及實體聲明中所出現的訪問修飾符共同決定
- 正確使用這些修飾符對信息隱藏很是關鍵
六、第一規則:儘量使每一個類或成員不被外界訪問優化
七、對於頂層的類(非嵌套類)和接口,只有兩種可能的訪問級別線程
- 包級私有:非public 修飾,成爲實現的一部分,內部修改優化,外界不感知
- 公有:public 修飾,API一部分,有責任一直維護,以保持兼容
八、一個頂層包級私有類,若是僅僅在一個類的內部被使用到設計
九、下降沒必要要公有類的可訪問性,比下降包級私有頂層類更重要的多對象
十、對於成員(域、嵌套類、嵌套接口、方法),有四中訪問級別接口
- 私有、包級私有是實現的一部分,不該該影響導出的API
(1)私有的(private):只有在聲明該成員的頂層類內部纔可訪問
(2)包級私有(缺省修飾符):聲明該成員的包內部的任何類均可以訪問
(3)受保護的(protected):聲明該成員類的子類能夠訪問,包內部也均可以訪問
(4)公有的(public):任何地方均可以訪問
十一、公有類的成員,從私有變成保護級別,會大大加強可訪問性
- 保護成員是其導出API一部分,必須一直支持
- 受保護成員也成了該類對某個實現細節的公開承諾,
- 受保護成員儘可能少用
十二、若是一個方法覆蓋了父類的一個方法,子類的訪問級別就不能低於超類的訪問級別
- 違反該規則,編譯器會報錯
- 若是一個類實現了一個接口,那麼全部接口方法,類都要聲明爲公有的
- 接口種方法都隱含着公有訪問級別
1三、實例域毫不能是公有的
- 包含公有可變域的類並非線程安全的
- 即便域是final 的,而且引用不可變對象
- 當這個域變成公有的時候,就放棄了「切換到內部數據表示法」的靈活性
- 一樣的狀況,適用於靜態域
- 例外:常量構成類提供的整個抽象的一部分,可使用靜態final 域暴漏他們
- 上述例外:大寫字母,下劃線分割,要麼引用基本類型值,要麼不可變類對象
- 若是引用可變對象,即使final 修飾,其餘地方能夠修改、災難後果
1四、長度非零的數組是可變的
- 類具備的公有final 數組域、返回這種域的訪問方法,幾乎都是錯的
- 若是類具備這樣的域或訪問方法,客戶端能夠訪問修改數組中的內容(常見安全漏洞)
兩種解決方案,要考慮客戶端如何使用結果、怎麼方便、性能高來進行選擇