日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dependence Injection

發(fā)布時間:2024/4/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dependence Injection 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Dependence Injection (依賴注入)這一名詞在幾天前我還沒有聽說過,第一次看到她是在自己拿到《程序員》2005第一期的時候在一篇“依賴倒置、控制反轉、依賴注入”的文章中看到的。今天花了點時間看了看Martin fowler的Inversion of Control Containers and the Dependency Injection pattern,收獲不小,對以前學J2EE時對容器實現(xiàn)的疑惑也有了一點理解,如果工作時間允許的話,下一步也想花點時間研究一下幾個開源容器的實現(xiàn),在這方面有經(jīng)驗的兄弟們望不吝賜教:)

??????? 其實無論IoC還是依賴注入,都是為了滿足面向對象設計的依賴倒置原則,依賴注入所注入的對象通常是個可變因素,所以如果不采用注入的手法,那只能在調(diào)用者內(nèi)部進行強行的持有對象的實例,正如在以前的一篇State模式與Strategy模式 中所述的在State模式一樣,因為環(huán)境可能是一直在變的,那么如果我們想要實現(xiàn)操作隨環(huán)境的變化而產(chǎn)生不同的行為的話,在環(huán)境類中持有具體狀態(tài)實例是不可行的(具體狀態(tài)模式參見狀態(tài)模式),因為它違反了“依賴于抽象,而不依賴與抽象的實現(xiàn)”的設計原則。所以采取的方式如下:
????
????
/**////?<summary>
????
///?狀態(tài)模式的環(huán)境類,用與控制狀態(tài)間的轉換
????
///?</summary>

????public?class?Context
????
{
????????
private?State?state;

????????
/**////?<summary>
????????
///?環(huán)境的初始化
????????
///?</summary>
????????
///?<param?name="initState">初始化狀態(tài)</param>

????????public?Context(State?initState)
????????
{
????????????
this.state=initState;
????????}


????????
/**////?<summary>
????????
///?環(huán)境類所維護的狀態(tài)屬性
????????
///?</summary>

????????public?State?State
????????
{
????????????
get
????????????
{
????????????????
return?this.state;
????????????}

????????????
set
????????????
{
????????????????
this.state=value;
????????????}

????????}


????????
/**////?<summary>
????????
///?環(huán)境接口
????????
///?</summary>

????????public?void?ContextIterface()
????????
{
????????????Console.WriteLine(
"State?Context?Interface?called");
????????????
this.state.MainCalculateLogic();
????????}

????}


??????? 在上面的代碼中,State是一個抽象類,所有狀態(tài)的實現(xiàn)均繼承自該類,所以在可變的環(huán)境類(即上面代碼中的Context類)中依賴關系是在Context類以及State類之間,在這里依賴注入體現(xiàn)在了構造函數(shù)中傳入一個狀態(tài)對象,這種依賴注入的方式稱之為構造子注入(Constructor Injection),后通過一個State屬性來實現(xiàn)設置注入依賴(Setter Injection)。當然這兩種依賴注入方式可能結合起來使用,適用的情況是實現(xiàn)方式復雜多變、而且會發(fā)生來回的遷移,比如狀態(tài)模式。如果只是單純?yōu)榱丝蓴U展,為了消除代碼的Bad Smell情況那么個人認為用構造子依賴注入即可,比如在策略模式中的使用,見拙文策略模式以及策略模式與模板方法的結合 ,還有另外一中依賴注入方式叫接口注入(Interface Injection)但個人感覺用起來不是很直觀也稍顯煩瑣。?

??????? 其實我個人的理解還顯得很稚嫩,歡迎大家指點:)

轉載于:https://www.cnblogs.com/Masterpiece/archive/2005/01/24/96416.html

總結

以上是生活随笔為你收集整理的Dependence Injection的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。