C#设计模式之策略模式

策略模式简介

策略模式在设计模式中属于对象行为型模式,它的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。

策略模式的图解如下所示:

image-20240102101923246

示例

本文通过一个简单的例子来向大家介绍C#如何使用策略模式。本文以出行这个行为举例,出行我们可以使用多种方式,比如自己开车、乘坐公交、骑自行车等。

1、定义策略接口

public interface ITravelStrategy
 {
   
     public void Print();
 }

我们定义了一个出行策略接口,只定义了一个Print方法。

2、实现具体策略类

 public class Car : ITravelStrategy
 {
   
     public void Print()
     {
   
         Console.WriteLine("乘坐汽车出行\r\n");
     }
 }
 public class Bike : ITravelStrategy
 {
   
     public void Print()
     {
   
         Console.WriteLine("骑自行车出行\r\n");
     }
 }
 public class Bus : ITravelStrategy
 {
   
     public void Print()
     {
   
         Console.WriteLine("乘坐公交出行\r\n");
     }
 }

定义了三个具体策略类分别为Car、Bike与Bus,都实现了ITravelStrategy接口,它们的实现是不同的。

3、实现上下文类

 public class TravelContext
 {
   
     private ITravelStrategy _strategy;

     public TravelContext(ITravelStrategy strategy)
     {
   
         _strategy = strategy;
     }

     public void SetStrategy(ITravelStrategy strategy)
     {
   
         _strategy = strategy;
     }

     public void ExecuteStrategy()
     {
   
         _strategy.Print();
     }
 }

该上下文类维护一个对ITravelStrategy对象的引用,可以在构造函数中为其指定一个具体的策略类,它还提供了SetStrategy方法来改变策略,ExecuteStrategy方法来执行策略。

4、使用策略模式

static void Main()
{
   
    // 创建上下文并设置初始策略
    TravelContext travelContext = new TravelContext(new Car());

    travelContext.ExecuteStrategy();

    // 切换策略为坐公交出行
    travelContext.SetStrategy(new Bus());

    travelContext.ExecuteStrategy();

    // 切换策略为骑自行车出行
    travelContext.SetStrategy(new Bike());

    travelContext.ExecuteStrategy();
  
    Console.ReadLine();
}

运行结果:

image-20240102104738633

该示例的图解如下所示:

image-20240102100052307

总结

使用策略模式的步骤总结如下:

image-20240102110113643

希望对你有所帮助。

Ref

1、《Head First 设计模式(中文版)》

2、《大话设计模式》

3、《设计模式:可复用面向对象软件的基础》

4、YouTube Strategy Pattern - Design Patterns in C#

相关推荐

  1. C++ 设计模式策略模式

    2024-01-03 18:34:01       46 阅读
  2. 设计模式策略模式

    2024-01-03 18:34:01       54 阅读
  3. 设计模式策略模式

    2024-01-03 18:34:01       57 阅读
  4. 设计模式策略模式

    2024-01-03 18:34:01       46 阅读
  5. 设计模式策略模式

    2024-01-03 18:34:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-03 18:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-03 18:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-03 18:34:01       82 阅读
  4. Python语言-面向对象

    2024-01-03 18:34:01       91 阅读

热门阅读

  1. 计算机网络期末复习题(一)

    2024-01-03 18:34:01       45 阅读
  2. Vue 3 中的 watch 函数:实战指南

    2024-01-03 18:34:01       45 阅读
  3. 阿里云服务器Alibaba Cloud Linux 3镜像版本大全说明

    2024-01-03 18:34:01       58 阅读
  4. 第四篇 行为型设计模式 - 灵活定义对象间交互

    2024-01-03 18:34:01       56 阅读
  5. 【Manacher】LeetCode-5. 最长回文子串

    2024-01-03 18:34:01       55 阅读
  6. XAML转换器

    2024-01-03 18:34:01       48 阅读
  7. 每期一个小窍门: 重置kafka 消费者的偏移量

    2024-01-03 18:34:01       58 阅读
  8. C++零基础自学笔记

    2024-01-03 18:34:01       44 阅读