Effective Java 讀書筆記

2021-08-28 00:09:00 字數 2391 閱讀 2287

第二章  建立與銷毀物件

1、考慮用靜態工廠方法代替構造器

優點:1、有名稱

2、不必在每次呼叫他們的時候都建立乙個新的物件

3、他們可以返回原返回型別的任何子型別物件

4、使**更簡潔

缺點:1、類如果不含公有的或者受保護的構造器,就不能被子類化

2、與其他的靜態方法實際上沒有任何區別,不能一眼就看出來

可以用一些慣用的名稱:

valueof

ofgetinstance

newinstance

gettype

newtype

關於第三條優點,這種靈活的靜態工廠方法可以構成 服務者提供框架(service provider framework)

/**

* 服務提供者框架

* 多個服務提供者實現乙個服務,系統為服務提供者的客戶端提供多個實現,並把他們從多個實現中解耦出來

*/public class services

private static final string default_provider = "default_provider";

private static final concurrenthashmapproviders = new concurrenthashmap();

/*** 註冊提供者

* @param name

* @param provider

*/public static void registprovider(string name,provider provider)

/*** 註冊預設提供者

* @param provider

*/public static void registdefaultprovider(provider provider)

/*** 提供預設服務

* @return

*/public static service newinstance()

/*** 根據相應條件提供特定服務

* @param name

* @return

*/public static service newinstance(string name)

/*** 服務提供者介面

*/inte***ce provider

/*** 服務介面

*/inte***ce service

}}

/**

* 服務a

*/public class servicea implements services.service

/*** 服務提供者,負責註冊服務,構建服務類

*/static class providera implements services.provider

@override

public void registprovider()

}}/**

* 服務b

*/public class serviceb implements services.service

/*** 服務提供者,負責構建服務 向services類註冊服務

*/static class providerb implements services.provider

@override

public void registprovider()

}}

乙個測試例子

public class client 

}

最終列印

i am b

重疊構造器模式可行,但是當有許多引數的時候,客戶端**會很難編寫,過多的構造器也不利於閱讀

使用構建器,優點

1、客戶端**更加清晰,利於閱讀

2、可以在set方法或者build中對傳入引數進行驗證,及時丟擲異常

乙個簡單的例子

/**

* 不可變類,構造器私有

*/public class service

public bulider setage(int age)

public bulider setheight(int height)

public bulider setweight(int weight)

public service bulider()

}public string tostring()

private service(bulider bulider)

public static void main(string args)

}

Effective java 讀書筆記

一本書看了不少時間,終於這兩天看完了,看的眼睛生疼,估計也就領略了全書1 5的精華。這本書確確實實是本好書,就像剛剛牙牙學語的孩子必須接受父母的教導,電源插頭不可以摸,熱水不可以直接喝等等,很多經驗之談,給人確確實實的思考和應用。盡量多的編碼。如同讀書一樣,沒有一定的 量的積累,很難成為乙個好的程式...

Effective Java讀書筆記二

我們在設計類的時候,有些類難免會有許多的字段 fields 而這些字段可能需要在建立物件的時候對它們進行賦值。一般我們會考慮兩種方式 使用建構函式或者使用setter方法。使用建構函式的缺點很明顯,如果我們的字段過多,那麼就會讓建構函式的引數過多,在這種情況下,不但不容易理解和閱讀,而且非常容易出錯...

Effective Java 讀書筆記 4

23,在新 裡不用使用raw type。用了泛型之後,可以提供編譯時型別檢查,便於及早發現錯誤,從集合裡讀取資料的時候也不用手動的cast。如果真的想向集合裡插入多種型別的資料,可以使用object作為引數型別,比如list這樣的。有點要注意的是class literal不能是泛型,只能有list....