程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 每天一小段筆記-策略模式(Stategy Pattern),stategypattern

每天一小段筆記-策略模式(Stategy Pattern),stategypattern

編輯:C#入門知識

每天一小段筆記-策略模式(Stategy Pattern),stategypattern


 知識點

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

示例

1 public interface FlyBehavior 2 { 3 void Fly(); 4 } 5 6 class FlyWithWings:FlyBehavior 7 { 8 #region FlyBehavior 成員 9 10 public void Fly() 11 { 12 Console.WriteLine("會飛的鴨子"); 13 } 14 15 #endregion 16 } 17 18 public class FlyNoWay:FlyBehavior 19 { 20 #region FlyBehavior 成員 21 22 public void Fly() 23 { 24 Console.WriteLine("飛不起來的"); 25 } 26 27 #endregion 28 } 飛行行為 1 public interface QuackBehavior 2 { 3 void Quack(); 4 } 5 6 class Quack:QuackBehavior 7 { 8 #region QuackBehavior 成員 9 10 void QuackBehavior.Quack() 11 { 12 Console.WriteLine("嘎!嘎!嘎!"); 13 } 14 15 #endregion 16 } 17 18 class MuteQuack:QuackBehavior 19 { 20 #region QuackBehavior 成員 21 22 public void Quack() 23 { 24 Console.WriteLine("世界一片安靜"); 25 } 26 27 #endregion 28 } 叫行為 1 public abstract class Duck 2 { 3 //將鴨子的行為通過組合的方式使用,而不是繼承 4 FlyBehavior _flyBehavior; 5 QuackBehavior _quackBehavior; 6 7 public FlyBehavior FlyBehavior 8 { 9 set { _flyBehavior = value; } 10 } 11 12 public QuackBehavior QuackBehavior 13 { 14 set { _quackBehavior = value; } 15 } 16 17 public abstract void Display(); 18 19 public void PerformFly() 20 { 21 _flyBehavior.Fly(); 22 } 23 public void PerformQuack() 24 { 25 _quackBehavior.Quack(); 26 } 27 } 鴨子抽象類 1 class RedheadDuck:Duck 2 { 3 public override void Display() 4 { 5 Console.WriteLine("紅頭鴨"); 6 } 7 } 實現類紅頭鴨
 1     class Program
 2     {
 3         static void Main(string[] args) {
 4             Duck duck = new RedheadDuck() { 
 5                 FlyBehavior=new FlyWithWings(),
 6                 QuackBehavior=new Quack()
 7             };
 8             duck.Display();
 9             duck.PerformFly();
10             duck.PerformQuack();
11 
12             Console.ReadKey();
13         }
14     }

定義

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

小結

  將主體類的行為分開放在別的類中,這個類就專門用來提供行為接口的實現,這樣主體類就不再需要關注行為的實現細節。

  就像上面的代碼中,紅頭鴨的飛行為,放在了FlyWithWings類中,這個類實現了一個飛行為的接口,具體怎麼飛,在紅頭鴨的類中我們不需要知道,只要交給FlyWithWings類就行。

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