Re: [問題] setXXX
※ 引述《sioo (加油加油)》之銘言:
: 請問一下,我發現在很多的API裡面,
: 在建立物件時,都不直接使用建構子來建立物件,
: 一些參數都要透過setXXX()的方法來給值,
: 請問使用這種方法有什麼好處嗎?
: 用建構子不是更方便嗎 謝謝...
這個問題問的好
之前還跟某台客高手爭執這件事情
也算是機緣巧合,不久之後就翻到書上的這段話
我引用如下,還希望作者不要介意
===============================================================
Spring 技術手冊 p.3-7
至於要使用 Constructor 或 Setter 方法來完成依賴注入這個
問題,其實就等於在討論一個古老的問題:要在物件建立時就準備好
所有的資源,或是在物件建立好後,再使用 Setter 方法來進行設定
。
使用 Constructor 的好處之一是,可以在建構物件的同時一併
完成依賴關係的建立,物件一建立後,它與其它物件的依賴關係也就
準備好了,但如果要建立的物件關係很多,使用 Constructor
injection 會在建構方法上留下一長串的參數,且不易記憶,這時使
用 Setter 方法會是個不錯的選擇。另一方面,Setter 方法具有明
確的方法名稱可以了解注入的物件匯是什麼,像是 setXXX() 這樣的
名稱,會比記憶 Constructor 上某個參數位置的索引代表某個物件
來得好,當結合 IDE 的方法提示功能使用時,撰寫程式會更方便且
有效率。
然而使用 Setter 方法時,由於提供有 setXXX() 方法,所以不
能保證相關的資料成員或資源在執行時期不會被更改設定,因為程式
開發人員可能直接執行 Setter 方法來設定相關屬性,所以如果想要
讓一些資料成員或資源變為唯讀或是私有,使用 Constructor
injection 會是個簡單的選擇。
--
侃侃長論鮮窒礙 網站:http://www.psmonkey.idv.tw
眾目睽睽無心顫 個人版:telnet://legend.twbbs.org
煢居少聊常人事
殺頭容易告白難 歡迎參觀 Java 版(@ptt.cc)精華區 \囧/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.172.167
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 22 篇):