這樣的寫法是使用合成方式 而不是使用繼承來完成我們需要的功能
這樣的好處是彈性較大 假設之後需要針對我們現在的寫法做(需求)
變更 我們並不需要針對舊有的程式做更改 只需要新增一個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前多想一下吧
多用合成 少用繼承 未來
沒有留言:
張貼留言