行为型设计模式——策略模式
定义一系列的算法,把它们一个个封装起来,并且使它们之间可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。
适用于
①许多相关的类,仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
②需要使用一个算法的不同变体。例如,定义一些反映不同空间的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
③算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法无关的数据结构。
④一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,将相关的条件分支移入它们各自的Strategy类中,以代替这些条件语句。
类图如下

1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 //618到来 6 IStrategy strategy = new StrategyA(); 7 SaleMan saleMan = new SaleMan(strategy); 8 saleMan.SaleManShow(); 9 10 //双十一到来 11 strategy = new StrategyB(); 12 saleMan = new SaleMan(strategy); 13 saleMan.SaleManShow(); 14 15 //春节到来 16 strategy = new StrategyC(); 17 saleMan = new SaleMan(strategy); 18 saleMan.SaleManShow(); 19 } 20 }
1 /// <summary> 2 /// 抽象策略接口,用于提供统一的策略接口,由具体策略实现 3 /// </summary> 4 internal interface IStrategy 5 { 6 void Show(); 7 }
1 /// <summary> 2 /// 具体策略A 3 /// </summary> 4 internal class StrategyA : IStrategy 5 { 6 public void Show() 7 { 8 Console.WriteLine("促销活动A,买一送一"); 9 } 10 }
1 /// <summary> 2 /// 具体策略B 3 /// </summary> 4 internal class StrategyB : IStrategy 5 { 6 public void Show() 7 { 8 Console.WriteLine("促销活动B,满1000减免100"); 9 } 10 }
1 /// <summary> 2 /// 具体策略B 3 /// </summary> 4 internal class StrategyC : IStrategy 5 { 6 public void Show() 7 { 8 Console.WriteLine("促销活动C,购买商品参与抽奖,最高奖励华为三折叠手机"); 9 } 10 }
1 /// <summary> 2 /// 上下文类,聚合一个IStrategy对象引用,调用策略 3 /// </summary> 4 internal class SaleMan 5 { 6 private IStrategy strategy; 7 8 public SaleMan(IStrategy strategy) 9 { 10 this.strategy = strategy; 11 } 12 13 //促销员展示具体活动 14 public void SaleManShow() 15 { 16 strategy.Show(); 17 } 18 }

浙公网安备 33010602011771号