策略模式有点类似我刚刚写的提供者模式。但是在配置上是不同的。下面是一些基本的演示:

模式定义
    定义:"准备一组算法,并将每一个算法封装起来,使得它们可以互换。"
模式意图
    策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。使这些算法可以相互替换,并提供一种方法来选择最合适的算法

 

浅谈策略模式(Strategy Pattern)根据上面UML,不难看出,在策略模式里主要有三
种角色:环境角色、抽象策略角色和具体策略角色
1、环境(Context)角色:持有一个抽象策略(Strategy)角色的引用。也叫上下文。
2、抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或一个抽象类来实现。
3、具体策略(ConcreteStrategy)角色:包装了相应的算法和行为。

 

 StrategyDemo
{
    /// </summary> 
    
/// 抽象策略角色:这是一个抽象角色,通常由一个接口或抽象类实现。 
    
/// 此角色给出所有的具体策略类所需的接口。 
    
/// </summary> 
   public abstract class Strategy
   {
       
public abstract void WriteLog();
   }

   
////////////////////////////////////////////////////////////////////////////////////////////
   
/// </summary>
   
/// 具体策略角色:包装了相关的算法或行为。 
   
/// 日志文件保存到数据库中
   
/// </summary> 
    
    
public class DBStrategy:Strategy
    {
        
public override void WriteLog()
        {
            Console.WriteLine(
"日志被记录到数据库!");
        }
    }
    
/// </summary>
    
/// 具体策略角色:包装了相关的算法或行为。 
    
/// 日志文件保存到记事本中
    
/// </summary> 
    
    
public class TXTStrategy:Strategy
    {
        
public override void WriteLog()
        {
            Console.WriteLine(
"日志被记录到TXT记事本!");
        }
    }
    
/// </summary>
    
/// 具体策略角色:包装了相关的算法或行为。 
    
/// 日志文件保存到xml中
    
/// </summary> 
    public class XMLStrategy:Strategy
    {
        
public override void WriteLog()
        {
            Console.WriteLine(
"日志被记录到XML文件中!");
        }
    }
    
///////////////////////////////////////////////////////////////////////////////////////////////////



}

 

 

 

主函数 

定义了一个抽象策略角色(Strategy),三种不同的日志记录策略(TXTStrategy、XMLStrategy和DBStrategy),也就是模式参与者中的具体策略角色,在环境角色里持有一抽象策略角色的引用,并通过构造器传入具体的策略对象初始化策略角色的引用,我们还定义了一动态设置策略的方法(SetStrategy),UML如下:

 

浅谈策略模式(Strategy Pattern) 

 

 

相关文章:

  • 2021-08-26
  • 2022-01-24
  • 2021-05-26
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-09
  • 2021-06-29
  • 2022-01-04
  • 2021-12-24
相关资源
相似解决方案