• 作者:老汪软件技巧
  • 发表时间:2024-10-29 17:05
  • 浏览量:

软件设计模式中,命令模式职责链模式都是非常实用的设计模式,它们可以帮助我们构建更加灵活和可扩展的应用程序。本文将从基础概念出发,逐步深入探讨这两种模式,并通过具体的C#代码示例来帮助理解。

命令模式概念

命令模式是一种行为设计模式,它将请求封装成对象,从而使你可以用不同的请求、队列或者请求日志参数化其他对象。命令模式也支持可撤销的操作。

核心组件优点缺点示例代码

// 命令接口
public interface ICommand
{
    void Execute();
}
// 具体命令
public class LightOnCommand : ICommand
{
    private readonly Light _light;
    public LightOnCommand(Light light)
    {
        _light = light;
    }
    public void Execute()
    {
        _light.TurnOn();
    }
}
// 接收者
public class Light
{
    public void TurnOn()
    {
        Console.WriteLine("Light is on");
    }
}
// 调用者
public class RemoteControl
{
    private ICommand _command;
    public void SetCommand(ICommand command)
    {
        _command = command;
    }
    public void PressButton()
    {
        _command.Execute();
    }
}
// 客户端
class Program
{
    static void Main(string[] args)
    {
        var light = new Light();
        var lightOnCommand = new LightOnCommand(light);
        var remoteControl = new RemoteControl();
        remoteControl.SetCommand(lightOnCommand);
        remoteControl.PressButton(); // 输出: Light is on
    }
}

常见问题与易错点如何避免职责链模式概念

职责链模式是一种行为设计模式,它允许你将请求沿着处理者链进行发送。收到请求后,每个处理者都可以处理请求或将其传递给链中的下一个处理者。

核心组件优点缺点示例代码

// 处理者接口
public abstract class Handler
{
    protected Handler _nextHandler;
    public void SetNext(Handler nextHandler)
    {
        _nextHandler = nextHandler;
    }
    public abstract void HandleRequest(int request);
}
// 具体处理者
public class ConcreteHandler1 : Handler
{
    public override void HandleRequest(int request)
    {
        if (request >= 0 && request < 10)
        {
            Console.WriteLine($"ConcreteHandler1 handled request {request}");
        }
        else if (_nextHandler != null)
        {
            _nextHandler.HandleRequest(request);
        }
    }
}
public class ConcreteHandler2 : Handler
{
    public override void HandleRequest(int request)
    {
        if (request >= 10 && request < 20)
        {
            Console.WriteLine($"ConcreteHandler2 handled request {request}");
        }
        else if (_nextHandler != null)
        {
            _nextHandler.HandleRequest(request);
        }
    }
}
// 客户端
class Program
{
    static void Main(string[] args)
    {
        var handler1 = new ConcreteHandler1();
        var handler2 = new ConcreteHandler2();
        handler1.SetNext(handler2);
        handler1.HandleRequest(5);  // 输出: ConcreteHandler1 handled request 5
        handler1.HandleRequest(15); // 输出: ConcreteHandler2 handled request 15
        handler1.HandleRequest(25); // 输出: 无输出,因为没有处理者处理 25
    }
}

常见问题与易错点如何避免总结

命令模式和职责链模式都是行为设计模式,它们各自有不同的应用场景和优缺点。通过本文的介绍和示例代码,希望读者能够更好地理解和应用这两种设计模式,从而构建更加灵活和可扩展的应用程序