差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 下次修改 Both sides next revision | ||
java:basic:close_systemin_of_scanner [2016/11/30 11:43] tony [Singleton] |
java:basic:close_systemin_of_scanner [2016/11/30 11:44] tony [Decorator] |
||
---|---|---|---|
行 9: | 行 9: | ||
- 使用Singleton樣式,大家都用同一個Global Scanner。 | - 使用Singleton樣式,大家都用同一個Global Scanner。 | ||
第一個做法對於寫code有潔癖的人來說,不會去使用的。而第二和第三個做法,以單元測試方便性來說與,我比較偏愛Decorator方式;使用Singleton的作法,還要考慮到底是誰負責close。如果大家都說好,你可以透過shutdown hook去close。 | 第一個做法對於寫code有潔癖的人來說,不會去使用的。而第二和第三個做法,以單元測試方便性來說與,我比較偏愛Decorator方式;使用Singleton的作法,還要考慮到底是誰負責close。如果大家都說好,你可以透過shutdown hook去close。 | ||
- | ==== Decorator ==== | + | \\ |
- | 參考apache common io程式碼: | + | 分享decorator作法,參考apache common io程式碼: |
<code java> | <code java> | ||
public class CloseShieldInputStream extends ProxyInputStream { | public class CloseShieldInputStream extends ProxyInputStream { | ||
行 40: | 行 40: | ||
// some operations | // some operations | ||
} | } | ||
- | </code> | ||
- | ==== Singleton ==== | ||
- | <code java> | ||
- | public class SystemInScanner { | ||
- | private static Scanner mInstance = new Scanner(System.in); | ||
- | |||
- | private SystemInScanner(){ | ||
- | |||
- | } | ||
- | |||
- | public static Scanner getScanner(){ | ||
- | return mInstance; | ||
- | } | ||
- | } | ||
</code> | </code> | ||