[Design-Pattern] Strategy
策略模式 - Strategy Pattern
目的 : 將各種可以互換的演算法(策略)包裝成一個類別
排序策略
父類別
先宣告一個父類別
public enum Color
{
Black,
White,
Blue,
Gray,
Red
}
public class Car
{
public readonly int Price;
public readonly Color CarColor;
public Car(int price, Color color)
{
this.Price = price;
this.CarColor = color;
}
public override string ToString()
{
return $"Price : {Price}, Color : {CarColor}";
}
}
繼承 Comparer
透過繼承範型的 Comparer ,來實作排序演算法。
public class SortByColor : Comparer<Car>
{
public override int Compare(Car o1, Car o2)
{
if (o1 == null || o2 == null)
throw new ArgumentNullException();
return (o1.CarColor > o2.CarColor) ? 1 : (o1.CarColor == o2.CarColor) ? 0 : -1;
}
}
public class SortCarByPrice : Comparer<Car>
{
public override int Compare(Car o1, Car o2)
{
if (o1 == null || o2 == null)
throw new ArgumentNullException();
return (o1.Price > o2.Price) ? 1 : (o1.Price == o2.Price) ? 0 : -1;
}
}
實作測試
var c1 = new Car(100, Color.Black);
var c2 = new Car(50, Color.White);
var clist = new List<Car>
{
c1,
c2
};
clist.Sort(new SortByColor());
foreach (var c in clist)
{
Console.WriteLine(c.ToString());
}
clist.Sort(new SortCarByPrice());
foreach (var c in clist)
{
Console.WriteLine(c.ToString());
}
簡單工廠模式 VS 策略模式
簡單工廠模式 : 用來建立物件的模式,關注物件如何被產生。
策略模式 : 一種行為,關注的是行為的封裝。
區別 : 使用時機。
留言
張貼留言