### 設計優秀API的五大規則
規則1:建立強有力的專業術語
隨著API的不斷增長,這些專業術語會被重復使用。例如,這些行為會導致各種類/類型/方法(classes/types/methods)產生不同微妙的行為。
事實上,他們看起來很相似,需要通過命名來區分。以JDBC為例,無論你執行哪條語句,你都需要使用它們來執行。比如,你可以調用這些方法:
~~~
execute(String)
executeBatch()
executeQuery(String)
executeUpdate(String)
~~~
與之類似,無論你發布哪些資源,你都經常使用一些術語,比如,你會調用:
~~~
Connection.close()
Statement.close()
ResultSet.close()
~~~
事實上,close在JDK中是一款強大的且已被確立的專業術語,這就導致java.io.Closeable (since Java 1.5)與java.lang.AutoCloseable (since Java 1.7)接口建立了釋放資源約定。
該類聲明
~~~
countObservers()
deleteObserver(Observer)
deleteObservers()
~~~
同樣適用于Observer.update(),實則應稱為notify(),JDK API里的另一個術語。
規則2:在組合上運用對稱的命名方式
一旦你創建強有力的條款,你會開始將他們結合起來。當你看到JDK收集APIS,你會注意到它們以對稱的方式創建條款add()、remove()、contains()等等,在將其結合之前:
~~~
add(E)
addAll(Collection<? extends E>)
remove(Object)
removeAll(Collection<?>)
contains(Object)
containsAll(Collection<?>)
~~~
規則3:使用重載
人們之所以使用方法重載,主要是因為它給程序帶來了許多方便。你經常希望在不同的地方做相同的事情,但每次去構造方法又很繁瑣,那怎么辦?你只需為API用戶在相同的方法里提供額外的變量,并且把參數類型設置成友好型(friend)。下面以Collection為例:
~~~
toArray()
toArray(T[])
~~~
另外一個是Arrays utility類:
~~~
copyOf(T[], int)
copyOf(boolean[], int)
copyOf(int[], int)
~~~
使用重載的兩大原因:
1. 提供“default”參數行為,正如Collection.toArray()
2. 支持一些不兼容的“相似”參數設置,如 Arrays.copyOf()
規則4:參數順序一致
為了確保參數順序的一致性,把數組類型放在第一位會給你帶來很多好處:
~~~
copyOf(T[], int)
copyOf(boolean[], int)
copyOf(int[], int)
~~~
你會注意到,在上面那個類中,把所有數組操作都放在第一位