這樣的寫法是使用合成方式 而不是使用繼承來完成我們需要的功能
這樣的好處是彈性較大 假設之後需要針對我們現在的寫法做(需求)
變更 我們並不需要針對舊有的程式做更改 只需要新增一個class就可以了
這是多麼開心的事情 新增功能又不會影響到舊有的功能
接著講sample
假設我今天有一段程式在不同的情境需要套用不同的sort 演算法
就可以套用strategy pattern
代碼如下
C#
abstract class Sorting { abstract public void 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 sortalgorithm = new QuickSort(); sortalgorithm.Process(); sortalgorithm = new MergeSort(); sortalgorithm.Process(); } }
Java
abstract class Sorting { abstract public void Process(); } class QuickSort extends Sorting { public void Process() { System.out.println("QuickSort"); } } class MergeSort extends Sorting { public void Process() { System.out.println("MergeSort"); } } public class strategy { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Sorting sortalgorithm = new QuickSort(); sortalgorithm.Process(); sortalgorithm = new MergeSort(); sortalgorithm.Process(); } }
總結 寫code前多想一下吧
多用合成 少用繼承 未來
沒有留言:
張貼留言