C# 设计模式
Result 模式、Fluent Interface、策略模式、工厂泛型实现
C# 设计模式
C# 的类型系统让设计模式有了更优雅的实现——Result 模式替代异常、Fluent Interface 链式调用。
学完本章你将: 掌握 Result 模式、Fluent Interface、策略模式泛型实现。
Result 模式 —— 替代异常
csharp
public class Result<T>
{
public bool Success { get; }
public T? Data { get; }
public string? Error { get; }
private Result(bool success, T? data, string? error)
=> (Success, Data, Error) = (success, data, error);
public static Result<T> Ok(T data) => new(true, data, null);
public static Result<T> Fail(string error) => new(false, default, error);
public Result<TNext> Then<TNext>(Func<T, Result<TNext>> f)
=> Success ? f(Data!) : Result<TNext>.Fail(Error!);
}
// 使用——链式调用
Result<User> GetUser(int id) => Result<User>.Ok(user);
Result<Order> CreateOrder(User u) => Result<Order>.Ok(order);
var result = GetUser(1).Then(u => CreateOrder(u));
Fluent Interface
csharp
var request = RequestBuilder.Create()
.WithUrl("/api/users")
.WithMethod("POST")
.WithHeader("Authorization", "Bearer xxx")
.WithBody(new { name = "小明" })
.Build();
策略模式 + 泛型
csharp
public interface IPaymentStrategy
{
Task<bool> PayAsync(decimal amount);
}
public class PaymentService<T> where T : IPaymentStrategy
{
private readonly T _strategy;
public PaymentService(T strategy) => _strategy = strategy;
public Task<bool> CheckoutAsync(decimal amount) => _strategy.PayAsync(amount);
}