舉例來說 Strategy Pattern 就有用到這個idea
abstract class Sorting { abstract public void Process(); } class SortAlgorithm { private Sorting algorithm; public SortAlgorithm(Sorting algorithm) { this.algorithm = algorithm; } public void Sort() { algorithm.Process(); } } class QuickSort : Sorting { public override void Process() { System.Diagnostics.Debug.Write("QickSort Algorithm"); } } class MergeSort : Sorting { public override void Process() { System.Diagnostics.Debug.Write("MergeSort Algorithm"); } } class Program { static void Main(string[] args) { Sorting quicksort = new QuickSort(); SortAlgorithm sortalgorithm = new SortAlgorithm(new QuickSort()); sortalgorithm.Sort(); sortalgorithm = new SortAlgorithm(new MergeSort()); sortalgorithm.Sort(); } }
從例子來說 Sorting 真正的實體是由 QuickSort 或 MergeSort來決定的
這部分就是 DI的精神 這樣子寫就可以讓 SortAlgorithm與 QuickSort 以及 MergeSort 解耦合
如果之後有需要做SortAlgorithm的測試時 可以 丟入一個 寫死的演算法 TestSort 回傳固定的排序 這樣就可以測試 SortAlgorithm是否有問題
沒有留言:
張貼留言