程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 設計模式之策略模式,設計模式策略

設計模式之策略模式,設計模式策略

編輯:C#入門知識

設計模式之策略模式,設計模式策略


一、定義
策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。

二、設計原則

1、找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起。
2、針對接口編程,而不是針對實現編程。
3、多用組合,少用繼承。

三、示例

/// <summary>
/// 鴨子類
/// </summary>
public abstract class Duck
{
protected IFlyBehavior flyBehavior;
protected IQuackBehavior quackBehavior;
public Duck()
{
}

public abstract void Display();
public void PerformFly()
{
flyBehavior.Fly();
}

public void PerformQuack()
{
quackBehavior.Quck();
}

public void setFlyBehavior(IFlyBehavior fb)
{
flyBehavior = fb;
}

public void setQuckBehavior(IQuackBehavior qb)
{
quackBehavior = qb;
}

public void Swim()
{
Console.WriteLine("鴨子全都會游泳!");
}
}

/// <summary>
/// 飛行行為
/// </summary>
public interface IFlyBehavior
{
void Fly();
}

public class FlyNoWay:IFlyBehavior
{
public void Fly()
{
Console.WriteLine("不會飛!");
}
}

public class FlyWithWings :IFlyBehavior
{
public void Fly()
{
Console.WriteLine("飛飛飛!");
}
}

public class FlyRocketPower:IFlyBehavior
{
public void Fly()
{
Console.WriteLine("火箭加速飛!");
}
}


/// <summary>
/// 綠頭鴨
/// </summary>
public class MallardDuck:Duck
{
public MallardDuck()
{
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
public override void Display()
{
Console.WriteLine("我是一只綠頭鴨!");
}
}

/// <summary>
/// 模型鴨
/// </summary>
public class ModelDuck:Duck
{
public ModelDuck()
{
flyBehavior = new FlyNoWay();
quackBehavior = new MuteQuack();
}
public override void Display()
{
Console.WriteLine("我是一個模型鴨");
}
}
static void Main(string[] args)
{
Duck muteQuack = new MallardDuck();

muteQuack.PerformFly();

Duck model = new ModelDuck();
model.PerformFly();
model.setFlyBehavior(new FlyRocketPower());
model.PerformFly();
Console.ReadLine();
}

 

源碼下載

 

 

轉載請注明來自:閃閃的幸運星

原文地址:http://www.cnblogs.com/dongyang

如若轉載,請保留原文地址。謝謝合作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved