策略(Strategy)
概念
策略模式是一種行為型模式,概念是不將方法實作在物件內,而是將方法以策略的方式提供給物件使用,藉此達成抽換方法的目的。
舉個例子,老闆給你一把電鑽,請你在工件上攻一個牙孔,該怎麼做?先拿鑽頭鑽孔後,再換絲攻攻牙。
沒錯,從策略模式的角度,電鑽是一個物件,而電鑽夾頭是策略的介面,而鑽頭及絲攻正是兩種不同的策略。
範例
//**************
//* author: cian
//* 20231011
//**************
/* 電鑽類別 */
class ElectricDrill
{
private IStrategy _tool;
/* 更換工具 */
public void ChangeTool(IStrategy tool)
{
this._tool = tool;
}
/* 使用電鑽 */
public void Execute()
{
if(_tool == null) return;
_tool.Execute();
}
}
/* 策略介面: 電鑽工具 */
interface IStrategy
{
void Execute();
}
/* 策略: 攻牙器 */
class Tap : IStrategy
{
public void Execute()
{
Console.WriteLine( "Tapping..." );
}
}
/* 策略: 鑽頭 */
class Drill : IStrategy
{
public void Execute()
{
Console.WriteLine( "Drilling..." );
}
}
/******************************************************/
class Application
{
static void Main()
{
ElectricDrill myDrill = new ElectricDrill();
myDrill.ChangeTool(new Drill()); //換上鑽頭
myDrill.Execute(); //Drilling...
myDrill.ChangeTool(new Tap()); //換上絲攻
myDrill.Execute(); //Tapping...
}
}
以上為學習過程的紀錄,後來想想拿鑽頭當範例有個缺點,電鑽、鑽頭還有鑽的動作在英文都是Drill…有點尷尬
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言