設計模式 控制反轉 依賴注入

2021-06-08 21:47:01 字數 2258 閱讀 7105

一、控制反**

從簡單的**示例入手:

/// /// 郵件服務類

///

public class emailservice

}/// /// 郵件通知類

///

public class notifycationsystem

}

共兩個類,乙個郵件服務類,乙個郵件通知類,郵件通知類依賴於郵件服務類。郵件通知類必須精確的知道建立和使用了哪種型別的服務,此處高耦合了。

改進一:在兩**塊中引入抽象層,提取介面。

/// /// 郵件服務介面

///

public inte***ce imessageservice

/// /// 郵件服務類

///

public class emailservice : imessageservice

}/// /// 郵件通知類

///

public class notifycationsystem

}

上面將依賴具體實現改為了依賴介面,減少了部分耦合。但是郵件服務類還是在郵件通知類內例項化的,也就是說郵件通知類還是要完全知道郵件服務類的具體細節。

改進二:將選擇抽象實現的責任移到服務消費者類的外部。

/// /// 第二層抽象: 服務定位器

///

public inte***ce iservicelocator

/// /// 第一層抽象:郵件服務介面

///

public inte***ce imessageservice

/// /// 郵件服務類

///

public class emailservice : imessageservice

}/// /// 郵件通知類

///

public class notifycationsystem

}

擴充套件一:弱型別服務定位器。

/// /// 第二層抽象: 服務定位器

///

public inte***ce iservicelocator

/// /// 第一層抽象:郵件服務介面

///

public inte***ce imessageservice

/// /// 郵件服務類

///

public class emailservice : imessageservice

}/// /// 郵件通知類

///

public class notifycationsystem

}

弱型別服務定位器使得這種模式更加靈活,因為他允許請求任意型別的服務型別。採用type型別的引數,並返回乙個非型別化的示例,也就是乙個object型別物件。

擴充套件二:泛型方法。

/// /// 第二層抽象: 服務定位器

///

public inte***ce iservicelocator

/// /// 第一層抽象:郵件服務介面

///

public inte***ce imessageservice

/// /// 郵件服務類

///

public class emailservice : imessageservice

}/// /// 郵件通知類

///

public class notifycationsystem

}

泛型方法,讓依賴反轉**看上去更加高效優雅。

二、依賴注入:

1.建構函式注入:

/// /// 郵件通知類

///

public class notifycationsystem

}

2.屬性注入:

/// /// 郵件通知類

///

public class notifycationsystem

return messageservice.sendmessage();

}}

設計模式 控制反轉 依賴注入

一 控制反 從簡單的 示例入手 郵件服務類 public class emailservice 郵件通知類 public class notifycationsystem 共兩個類,乙個郵件服務類,乙個郵件通知類,郵件通知類依賴於郵件服務類。郵件通知類必須精確的知道建立和使用了哪種型別的服務,此處高...

工廠模式,控制反轉(依賴注入)

在介紹工廠模式與控制反轉 inversion of control 及依賴注入 dependency injection 之前,先介紹下類的呼叫方法。目前呼叫方法總共有3種 1.自己建立 2.工廠模式 3.外部注入,其中外部注入即為控制反轉 依賴注入模式 ioc di 我們可以用3個形象的東西來分別...

依賴注入 控制反轉

控制反轉 inversion of control,縮寫為ioc 是物件導向程式設計中的一種設計原則,可以用來減低計算機 之間的耦合度。其中最常見的方式叫做依賴注入 dependency injection,簡稱di 例子com.itcast.bean package com.itcast.bean...