2013年9月22日 星期日

設計模式 (二) Strategy Pattern

策略模式 讓使用者可以動態改變演算法
這樣的寫法是使用合成方式 而不是使用繼承來完成我們需要的功能
這樣的好處是彈性較大  假設之後需要針對我們現在的寫法做(需求)
變更  我們並不需要針對舊有的程式做更改  只需要新增一個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前多想一下吧
多用合成  少用繼承  未來maintain的生活會變得更美好 XD

沒有留言:

張貼留言