Effective Java Item 21 note

Use function objects to represent strategies

Arwii
mycodingjourney
2 min readJun 20, 2018

--

策略模式的定義是:

把演算法封裝起來,有相同的使用介面,當演算法更換,不會影響到使用演算法的使用方式。

在C可以用function pointer實作這樣的功能,本書著作的時候Java還沒有支援lambda的功能,所以用的是interface再加上object references來讓策略模式可行。

因為strategy class應該會是無狀態的,所以使用上你可以使用Singleton去包裝單一個特定功能的method,來減少多餘物件產生。(例子)

然後這樣的singleton是有固定object型別的,可以更近一步的定義個template,讓strategy更彈性。

然後要實例化的時候,你可以宣告成一個變數,也可以宣告成匿名class(這兩個方法每次使用的時候都會多出一個instance),可以把變數放在private static final然後命名來改善上面的用法。(例子)

然後Java 8導入了lambda,對於item19跟21都有些不太一樣的影響。需要放另一個筆記再去討論這件事情。

--

--

Arwii
mycodingjourney

Try not to become a man of success, but rather try to become a man of value — A. Einstein