首页 > 其他分享 >策略模式(Strategy Pattern) .Net Core实现

策略模式(Strategy Pattern) .Net Core实现

时间:2023-12-23 20:14:04浏览次数:29  
标签:Core Pattern AlgorithmInterface Strategy void context strategy public

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。

何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

如何解决:将这些算法封装成一个一个的类,任意地替换。

关键代码:实现同一个接口。

 

 

 

参考:https://blog.csdn.net/weixin_44231544/article/details/127050975

namespace ConsoleApp2
{
    public interface Strategy
    {
        void AlgorithmInterface();
    }
    public class ConcreteStrategyA : Strategy
    {
        public void AlgorithmInterface()
        {
            Console.WriteLine(
                "Called ConcreteStrategyA.AlgorithmInterface()");
        }
    }
    public class ConcreteStrategyB : Strategy
    {
        public void AlgorithmInterface()
        {
            Console.WriteLine(
                "Called ConcreteStrategyB.AlgorithmInterface()");
        }
    }
    public class Client
    {
        Strategy strategy;
        // Constructor
        public Client(Strategy strategy)
        {
            this.strategy = strategy;
        }
        public void ContextInterface()
        {
            strategy.AlgorithmInterface();
        }
    }
}

 

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");


            Client context;
            // Two contexts following different strategies
            context = new Client(new ConcreteStrategyA());
            context.ContextInterface();
            context = new Client(new ConcreteStrategyB());
            context.ContextInterface();

            Console.ReadLine();
        }
    }
}

 

标签:Core,Pattern,AlgorithmInterface,Strategy,void,context,strategy,public
From: https://www.cnblogs.com/cxxtreasure/p/17923538.html

相关文章

  • 一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
    前言经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的,今天就给大家分享一款基于MITLicense协议开源、免费的.NETCore快速开发框架、支持多种前端UI、内置代码生成器、一款高效开发的利器:WalkingTec.Mvvm框架(简称WTM)。官方项目介绍WalkingTec.Mvvm框架(简称W......
  • Spring Framework Reference 5.3.27 - Core Technologies
    目录Chapter1.TheIoCContainerSpringIoC容器和bean介绍Chapter2.ResourcesChapter3.Validation,DataBinding,andTypeConversionChapter4.SpringExpressionLanguage(SpEL)Chapter5.AspectOrientedProgrammingwithSpringChapter6.SpringAOPAPIsChapter......
  • EFCore 迁移(5)
    当模型发生更改时,将在正常开发过程中添加和删除迁移,并将迁移文件签入项目的源代码管理,进行迁移时,必须在启动程序中安装nuget包:Microsoft.EntityFrameworkCore.Tools,并在VS的程序包管理器控制台执行迁移指令管理迁移:1、新增迁移,Init指迁移名称,用途与版本控制中提交信息类似,有助于......
  • core-js引起的报错
    从git上获取的代码突然运行不起来,报错提示含有[email protected]:core-js@<3.23.3isnolongermaintainedandnotrecommendedforusageduetothenumberofissues.BecauseoftheV8enginewhims,featuredetectioninoldcore-jsversionscouldcause......
  • asp.net core 3.x 解决文件上传大小限制
    如在Kestrel服务器下可以选择在CreateHostBuilder方法中统一移除所有上传限制。也可在指定的action上添加[DisableRequestSizeLimit]属性解除限制。//第一种在CreateHostBuilder中添加配置。publicstaticIHostBuilderCreateHostBuilder(string[]args){......
  • 开源.NetCore通用工具库Xmtool使用连载 - 图像处理篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的扩展动态对象,今天我们继续为大家介绍其中的图像处理类库。在我们的软件系统中,经常需要对图片进行各种各样的处理;例如最常见的头像缩放,需要将用户上传的图片缩放成系统需要的最佳大小。本工具包主要将常用的图片方法进行汇总,方......
  • .NETCore Nuget 发布包含静态文件 content file
    .NETCore在.csproj引用资源中标记pack配置<pack>true</pack>1例如 <ItemGroup> <ContentInclude="dotnetty.linux.pfx"> <pack>true</pack> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <......
  • .NET Core 3 WPF MVVM框架 Prism系列之导航系统
    本文将介绍如何在.NETCore3环境下使用MVVM框架Prism基于区域Region的导航系统git在讲解Prism导航系统以前,咱们先来看看一个例子,我在以前的demo项目建立一个登陆界面:github 咱们看到这里是否是一开始想象到使用WPF带有的导航系统,经过Frame和Page进行页面跳转,而后经过导航日志......
  • .netcore 分布式事务CAP 快速入门
    https://blog.csdn.net/jbossjf/article/details/122590688CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性、可用性问题。一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单成功,解决方案有下面几种:1:创......
  • ASP.NET Core-限流(Rate Limiting)
    一、应用场景    微服务架构中,限流功能一般由网关提供。而对于很多非微服务化的系统,可能并没有网关[无论是因为成本还是复杂度],在这种场景下,为了实现限流,.NET7中提供了限流中间件RateLiniting。二、实现    首先,SDK版本>=7。    然后添加代码注册。......