C#设计模式之行为型模式详解
什么是行为型模式
行为型模式是面向对象设计中的一类设计模式,主要关注对象之间的交互和通信,以及对象的职责分配。它们描述了对象的行为,而不是它们的标识或状态。这些模式涉及到算法与对象间职责的分配,其中包括职责链、命令、解释器、迭代器、中介者、回调、观察者、状态、策略和模板方法等实现方法。
为什么需要行为型模式
在开发软件的过程中,我们需要大量使用到对象的行为,比如对象之间的通信、请求和响应等。如果我们没有合理的设计,这些行为很有可能导致代码的混乱和耦合,也会使代码难以维护和扩展。行为型模式可以帮助我们更好地组织代码,使得对象间的交互变得更加清晰、可维护、可扩展,同时也提高了代码的重用性和可读性。
常用的行为型模式及示例说明
命令模式
命令模式( Command Pattern ),将请求放置于对象之间, 并由不同的对象来完成请求的处理。这个模式所涉及到的角色有:
- 命令角色(Command): 声明执行操作的 接口。
- 具体命令角色(ConcreteCommand):命令接口实现对象,通常会持有接受者并调用接受者的功能来完成命令要执行的操作。
- 接受者角色(Receiver): 顾名思义,就是接受者,终于真正执行命令并完成相关操作的对象。
- 请求者角色(Invoker): 发送命令并要求命令执行请求的对象。
- 客户端角色(Client): 创建具体的Command对象,并设置命令的接收者,即具体的Receiver对象。
示例说明:
public interface ICommand
{
void Execute();
}
public class ConcreteCommand : ICommand
{
private Receiver _receiver;
public ConcreteCommand(Receiver receiver)
{
_receiver = receiver;
}
public void Execute()
{
_receiver.Action();
}
}
public class Receiver
{
public void Action()
{
Console.WriteLine("Receiver Action");
}
}
public class Invoker
{
private ICommand _command;
public void SetCommand(ICommand command)
{
_command = command;
}
public void ExecuteCommand()
{
_command.Execute();
}
}
class Program
{
static void Main(string[] args)
{
Receiver receiver = new Receiver();
ConcreteCommand cmd = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.SetCommand(cmd);
invoker.ExecuteCommand();
}
}
观察者模式
观察者模式( Observer Pattern ),又称发布订阅模式( Publish/Subscribe Pattern ),它是一种行为型模式。在该模式中,一个主题对象管理所有依赖它的观察者对象,并自动通知它们,以使它们能够自动更新自己。这个模式所涉及到的角色有:
- 抽象主题角色(Subject):该类定义了主题的核心功能,管理了所有观察者对象,提供增加或删除观察者的方法。
- 具体主题角色(ConcreteSubject):具体主题实现从抽象主题角色继承下来的功能,它通常包含有关该主题状态的具体信息,并对状态进行更改。
- 抽象观察者角色(Observer):该接口定义了观察者的方法,接受到主题发生变化的通知后即进行相应的操作。
- 具体观察者角色(ConcreteObserver):具体实现的观察者,在接到通知后将进行更新操作。
示例说明:
public interface IObserver<T>
{
void Update(T data);
}
public interface IObservable<T>
{
void AddObserver(IObserver<T> observer);
void RemoveObserver(IObserver<T> observer);
void NotifyObservers(T data);
}
public class WeatherData : IObservable<double>
{
private List<IObserver<double>> _observers = new List<IObserver<double>>();
private double _temperature;
public void AddObserver(IObserver<double> observer)
{
_observers.Add(observer);
}
public void NotifyObservers(double data)
{
foreach (var observer in _observers)
{
observer.Update(data);
}
}
public void RemoveObserver(IObserver<double> observer)
{
_observers.Remove(observer);
}
public void SetTemperature(double temperature)
{
_temperature = temperature;
NotifyObservers(temperature);
}
}
public class CurrentConditionsDisplay : IObserver<double>
{
private double _temperature;
public void Update(double data)
{
_temperature = data;
Console.WriteLine($"Current temperature is {_temperature}");
}
}
class Program
{
static void Main(string[] args)
{
var weatherData = new WeatherData();
var currentConditionsDisplay = new CurrentConditionsDisplay();
weatherData.AddObserver(currentConditionsDisplay);
weatherData.SetTemperature(25);
}
}
结语
以上是C#设计模式之行为型模式的详细介绍及示例说明,通过学习这些常用的行为型模式,可以使我们更好地组织代码,使得对象间的交互变得更加清晰、可维护、可扩展,同时也提高了代码的重用性和可读性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#设计模式之行为型模式详解 - Python技术站