1. 模式匹配(C# 7.0+)
使用 switch 表达式和属性模式简化复杂条件判断:
public string GetShapeDescription(object shape)
{
return shape switch
{
Circle { Radius: > 10 } c => $"大圆 (半径={c.Radius})",
Circle { Radius: var r } when r > 0 => $"小圆 (半径={r})",
Rectangle rect => $"矩形 ({rect.Width}x{rect.Height})",
_ => "未知形状"
};
}
2. 策略模式(行为逻辑解耦)
封装可互换的算法逻辑:
// 定义策略接口
public interface IShippingStrategy
{
decimal CalculateFee(Order order);
}
// 具体策略
public class ExpressShipping : IShippingStrategy
{
public decimal CalculateFee(Order order) => order.Total * 0.1m;
}
// 上下文使用策略
public class ShippingService(IShippingStrategy strategy)
{
public decimal GetShippingFee(Order order)
=> strategy.CalculateFee(order);
}
// 使用示例
var service = new ShippingService(new ExpressShipping());
service.GetShippingFee(new Order());
3. 状态模式(状态驱动逻辑)
管理对象状态转换的逻辑:
public interface IOrderState
{
void HandleState(Order order);
}
public class DraftState : IOrderState
{
public void HandleState(Order order)
=> Console.WriteLine("草稿状态:可编辑内容");
}
public class Order
{
private IOrderState _state = new DraftState();
public void SetState(IOrderState state) => _state = state;
public void Process() => _state.HandleState(this);
}
4. 条件化逻辑 (三元运算符 + ??)
简洁处理空值和默认值:
string name = user?.Name ?? "匿名用户"; // 空值合并
int discount = isVIP ? 30 : (age > 60 ? 20 : 0); // 嵌套三元
5. Fluent 链式调用 (Builder 模式)
构建可读性高的逻辑链:
public class QueryBuilder
{
private string _query = "SELECT * FROM Users";
public QueryBuilder Where(string condition)
{
_query += $" WHERE {condition}";
return this;
}
public QueryBuilder OrderBy(string field)
{
_query += $" ORDER BY {field}";
return this;
}
public string Build() => _query;
}
// 使用示例
var query = new QueryBuilder()
.Where("Age > 30")
.OrderBy("Name DESC")
.Build();
6. 规则引擎模式
动态组合业务规则:
public interface IDiscountRule
{
bool IsEligible(Order order);
decimal GetDiscount();
}
public class DiscountCalculator
{
private List<IDiscountRule> _rules = new();
public DiscountCalculator AddRule(IDiscountRule rule)
{
_rules.Add(rule);
return this;
}
public decimal Calculate(Order order)
=> _rules.Where(r => r.IsEligible(order))
.Sum(r => r.GetDiscount());
}
何时使用何种模式?
- 简单条件 → 模式匹配/三元运算符
- 可扩展算法 → 策略模式
- 状态转换 → 状态模式
- 复杂业务流程 → 规则引擎
- 配置型逻辑 → Fluent API / Builder
736

被折叠的 条评论
为什么被折叠?



