首頁 » 設計模式 » 策略(Strategy)

策略(Strategy)

作者:

分類:

策略(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…有點尷尬
如果文章有誤,歡迎前輩留言請不吝指教。

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *