- 作者:老汪软件技巧
- 发表时间: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
}
}
常见问题与易错点如何避免总结
命令模式和职责链模式都是行为设计模式,它们各自有不同的应用场景和优缺点。通过本文的介绍和示例代码,希望读者能够更好地理解和应用这两种设计模式,从而构建更加灵活和可扩展的应用程序