📅  最后修改于: 2023-12-03 15:28:19.561000             🧑  作者: Mango
编写现实世界的软件时,我们经常需要处理各种条件。这包括用户输入、系统参数、环境变量等。在这篇文章中,我们将讨论一些可用于处理众多条件的设计模式。
策略模式是一种行为设计模式,它允许您在运行时选择算法的不同实现。在本示例中,我们将使用策略模式来处理用户支付选项的不同实现。
public interface IPaymentStrategy
{
void Pay(double amount);
}
public class CreditCardPaymentStrategy: IPaymentStrategy
{
public void Pay(double amount)
{
//实现信用卡支付逻辑
}
}
public class PayPalPaymentStrategy: IPaymentStrategy
{
public void Pay(double amount)
{
//实现PayPal支付逻辑
}
}
public class PaymentContext
{
private IPaymentStrategy _paymentStrategy;
public PaymentContext(IPaymentStrategy paymentStrategy)
{
_paymentStrategy = paymentStrategy;
}
public void Payment(double amount)
{
_paymentStrategy.Pay(amount);
}
}
在此示例中,我们实现了两个支付策略CreditCardPaymentStrategy和PayPalPaymentStrategy,它们都实现了IPaymentStrategy接口。我们使用PaymentContext类来初始化并调用适当的支付策略。
观察者模式是一种行为设计模式,它使对象能够自动通知其依赖项。在本示例中,我们将使用观察者模式来通知已注册的用户关于系统更新的发生。
public interface IObserver
{
void Update(string update);
}
public class User: IObserver
{
public string Name { get; set; }
public void Update(string update)
{
Console.WriteLine($"{Name}收到了更新通知:{update}");
}
}
public interface IObservable
{
void Register(IObserver observer);
void Unregister(IObserver observer);
void Notify();
}
public class SystemUpdate: IObservable
{
private List<IObserver> _observers = new List<IObserver>();
private string _update;
public void Register(IObserver observer)
{
_observers.Add(observer);
}
public void Unregister(IObserver observer)
{
_observers.Remove(observer);
}
public void Notify()
{
foreach(var observer in _observers)
{
observer.Update(_update);
}
}
public string Update
{
get => _update;
set
{
_update = value;
Notify();
}
}
}
在此示例中,我们实现了IObserver接口,并将其用于类User,该类随时准备接收系统更新通知。我们还实现了IObservable接口,并将其用于SystemUpdate类,该类用于注册和取消订阅观察者,以及通知观察者有关系统更新的信息。
适配器模式是一种结构型设计模式,用于将两个接口兼容起来。在本示例中,我们将使用适配器模式将以不同方式编写的两个类的接口兼容起来。
public interface IShape
{
void DrawShape();
}
public class Rectangle
{
public void Draw()
{
Console.WriteLine("Draw a rectangle");
}
}
public class RectangleAdapter: IShape
{
private Rectangle _rectangle = new Rectangle();
public void DrawShape()
{
_rectangle.Draw();
}
}
在此示例中,我们通过实现IShape接口和创建一个适配器类RectangleAdapter来将Rectangle类与我们的应用程序兼容。适配器RectangleAdapter将与我们应用程序中其他类实现相同的IShape接口。最终,我们可以将适配过的Rectangle类用作图形类。
这些是处理许多复杂条件的一些常见设计模式。策略模式可用于不同的算法选择,观察者模式可用于通知多个观察者,适配器模式可用于兼容不同的接口。了解这些设计模式的工作原理可以帮助您在处理复杂条件时更有效地编写软件。