一、控制反**
從簡單的**示例入手:
/// /// 郵件服務類
///
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...