2013年10月14日 星期一

Design Pattern : Strategy

Design Pattern : Strategy

Strategy的定義:
「定義多個演算法,各別封裝這些演算法,並讓它們可以互換」

我們下面延續Design Pattern : Bridge的例子, 加上Strategy,讓車子可以自由地選擇Drive的方式。

1.  原本的程式碼中,在FocusBridge 實作 IAutoCarDrive方法的時候,我們用了一個布林值去判斷目前是要做手動還是自動駕駛。 接下來我們要用Strategy修改這部分。

原來的程式:
public class FocusBridge : IAutoCar
{
   
private ICar car;
   
ICar IAutoCar.Car 
   { 
     
get {return this.car; }
     
set { this.car = value; }
   }

   
void IAutoCar.Drive(bool IsAuto)
   {
      
if(IsAuto == true)
      {
        
Console.WriteLine(
          
String.Format("{0} {1} 自動駕駛中",
             
this.car.Color.ToString(), this.car.Name));
      }
      
else
      
{
    this.car.Drive();
   }
 }
}

2.  Strategy : Interface
public interface IDriveStrategy
{
 
void Drive(ICar myCar);
}

3.  Strategy : 實作兩個或更多Class

public
class Auto:IDriveStrategy
{
  
void IDriveStrategy.Drive(ICar myCar)
   {
   Console.WriteLine(
     String.Format("{0} {1} 自動駕駛中",
     myCar.Color.ToString(),myCar.Name));
 }
}

public class Manual:IDriveStrategy
{
  
void IDriveStrategy.Drive(ICar myCar)
   {
   Console.WriteLine(
     String.Format("{0} {1} 手動駕駛中",
     myCar.Color.ToString(),myCar.Name));
 }
}


4.  主程式
IAutoCar myCar = new FocusBridge();
myCar.Car =
new Focus();

IDriveStrategy driveStrategy = new Manual();
myCar.Drive(driveStrategy);


結果:
Black Focus
手動駕駛中



沒有留言:

張貼留言