策略模式

本文介绍了策略模式的基本概念,包括环境、策略接口和具体策略的角色,以及如何通过LoggerContext类在运行时切换不同策略(如ConsoleLogger和FileLogger)。展示了如何在程序中灵活地切换算法实现,无需修改客户端代码。
摘要由CSDN通过智能技术生成

策略模式

在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

策略模式包含以下几个核心角色:

**环境:**用来维护对策略对象的引用。它可以定义一个接口,让策略对象根据上下文数据来执行算法。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
**策略接口:**这是一个接口或者抽象类,定义了所有支持的算法的公共接口或共同的行为。
**具体策略:**实现策略接口的类,提供具体的算法实现。每个具体策略都是策略接口的一个子类,实现了其中的算法。

代码演示

public interface ILoggerStrategy
{
    void Log(string message);
}

实现两种具体的策略,一种是将日志记录到控制台,另一种是将日志记录到文件:

public class ConsoleLogger : ILoggerStrategy
{
    public void Log(string message)
    {
        Console.WriteLine("Console Logger: " + message);
    }
}

public class FileLogger : ILoggerStrategy
{
    public void Log(string message)
    {
        // 假设这里实现将消息写入文件的逻辑
        // 为了示例简洁,这里仅输出到控制台
        Console.WriteLine("File Logger: " + message);
    }
}

该类维护对策略对象的引用,并允许客户端根据需要更换策略:

public class LoggerContext
{
    private ILoggerStrategy _loggerStrategy;

    public LoggerContext(ILoggerStrategy loggerStrategy)
    {
        _loggerStrategy = loggerStrategy;
    }

    public void SetLoggerStrategy(ILoggerStrategy loggerStrategy)
    {
        _loggerStrategy = loggerStrategy;
    }

    public void Log(string message)
    {
        _loggerStrategy.Log(message);
    }
}

class Program
{
    static void Main(string[] args)
    {
        LoggerContext logger = new LoggerContext(new ConsoleLogger());
        logger.Log("This is a console log.");

        // 在运行时改变策略
        logger.SetLoggerStrategy(new FileLogger());
        logger.Log("This is a file log.");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值