星期五, 5月 26, 2006

[設計模式]策略模式

//策略模式
using System;

namespace Strategy
{
///
/// Class1 的摘要描述。
/// 主控台測試部分
///

class Client
{
///
/// 應用程式的主進入點。
///

[STAThread]
static void Pause()
{
Console.WriteLine("Press Enter To Continue....");
Console.ReadLine();
}

static void Main(string[] args)
{
//建立一位打者叫做barryBonds
BaseballPlayer player1=new BarryBonds();
//可以改變它的行為模式
//player1.SetSwingPosture(new NormalPosture());
//揮棒
player1.Swing();
Pause();
}
}
//抽象類別 野手類別
abstract class BaseballPlayer
{
protected SwingPosture posture;
public void Swing()
{
posture.Swing();
}
public void SetSwingPosture(SwingPosture posture)
{
this.posture=posture;
}
}
//繼承類別 有個叫做barrybonds的野手
class BarryBonds:BaseballPlayer
{
//設定他的打擊姿勢
public BarryBonds()
{
posture=new StarPosture();
}
};

//
//把容易變動的部份抽出來 利如揮棒姿勢 許多人都不一樣 但是也有一樣的 所以另外封裝
//

//揮棒姿勢的介面
interface SwingPosture
{
void Swing();
};

//實作揮棒姿勢 這是正常的揮棒姿勢
class NormalPosture:SwingPosture
{

#region SwingPosture 成員

public void Swing()
{
Console.WriteLine("我用正常姿勢揮棒");
}

#endregion

}
// 這是明星的揮棒姿勢
class StarPosture:SwingPosture
{

#region SwingPosture 成員

public void Swing()
{
Console.WriteLine("我用明星姿勢揮棒");
}

#endregion

}

}

沒有留言: