国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

《Effective Java》學習筆記(3)

2019-11-18 15:04:03
字體:
來源:轉載
供稿:網友

 四。類和接口

第12條:使類和成員的可訪問能力最小

    為了更好的實現信息隱藏,降低各模塊的耦合度,盡可能地降低類和成員的訪問能力是必須的。有一點非凡要害,就是公有的靜態final域幾乎全部是錯誤的。客戶可以修改這樣的成員數組,應該改為私有的才是安全的。

第13條:支持非可變類

使一個類成為非可變類需要做到以下5點:

1。不能提供任何會修改對象的方法

2。保證沒有可被子類覆寫的方法,可以通過使這個類為final來達到

3。使所有的成員變量都是final

4。使所有的成員變量都為私有

5。保證對于任何可變組件互斥訪問

使一個類成為非可變類的的優點:

1。非可變類通常比較簡單,呵呵,這點很明顯,他只有一個狀態

2。非可變類通常是線程安全的

3。非可變類為其他對象提供了很多構件

4。非可變類最大的缺點在于對于每個不同的值(或者說狀態),都要求一個單獨的對象,在某些情況下你需要創建非常多的對象,性能上有很大影響

盡管如此,盡力使每一個類成為非可變類應該是你追求的目標。



第14條:復合優于繼續

    昨天在看《面向對象編程導論》,提到“子類”和“子類型”是不同的,替換原則只適合于子類型關系,而一般編程語言只是考慮了子類關系,子類說明了新類是繼續自父類,而子類型強調的是新類具有父類一樣的行為(未必是繼續)。那么,什么時候才應該使用繼續?那就是符合子類型關系的時候,或者一般所說的”is a"關系,你必須保證新類的行為與父類完全一致!!!在任何使用父類的場合,新類應該表現一樣的行為。

   繼續是OOP最重要的概念之一,但是繼續也破壞了“封裝性”,子類的實現要依靠于父類的實現細節。所以,除了上面提到的情況外,你應該盡量用復合取代繼續。(在覆寫equals()方法也提到了這點)否則都屬于繼續的濫用,技術的濫用已經屢見不鮮了。

第15條:要么專門的設計,以使用繼續,并給出文檔說明,要么禁止繼續

    這點跟上面一點強調的一樣。假如你要使用繼續,請做好設計,在構造函數,clone(),readSolve()方法中不要調用任何可變的方法,并寫出具體的文檔說明。其實最好的情況,還是不使用的好!



第16條:接口優于抽象類

    接口是定義具有多個實現的類型的最佳途徑,這點很明顯,每個具體類實現接口不同。假如當演化的輕易性比靈活性更重要的時候,你應該使用抽象類。如,你要往抽象類中增加一個方法,任何實現這個抽象類的子類就自動具有這一個方法,而接口則不能,所有公有的接口的設計要非常謹慎,并保證盡力對外不做修改。在使用接口的時候,一般都設計一個抽象類作為“骨架”,這個抽象類應該盡可能地小,只保留有最基本的功能。

第17條:接口只是被用于實現類型

   你實現了一個接口,就代表這個類是該接口的類型。在應用我們經常看到在接口中定義靜態公有的常量,這其實是對接口的誤用(汗,我是這種錯誤的典型),如

public interface Constants{

    public int ONE=1;

    ......

}這樣的形式完全是錯誤的,應該使用一個不能產生實例的類來代替

public class Constants{

    PRivate COnstants(){}  //構造函數為私有

     pulic static final int ONE=1;

    ......

}

第18條:應該優先考慮靜態內部類

    非靜態類總是和外部類的實例相聯系,應該盡量使用靜態內部類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新晃| 香港 | 冷水江市| 通渭县| 拜泉县| 兰考县| 安多县| 林芝县| 锦屏县| 六枝特区| 甘南县| 兴安县| 义马市| 桦甸市| 临湘市| 河间市| 登封市| 石棉县| 惠东县| 兰州市| 白沙| 沿河| 高阳县| 新沂市| 宝丰县| 康保县| 广安市| 云阳县| 浪卡子县| 陇川县| 沂南县| 铁岭县| 刚察县| 博爱县| 怀来县| 丹江口市| 靖西县| 灌阳县| 石狮市| 成都市| 明光市|