Strategy策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。
在PetShop4.0中,可以看到一个策略模式,就是如何处理同步还是异步表单的情况。当然,Stratery模式还可以扩展其他的表单处理方法。
IOderStratery的代码如下:
public interface IOrderStrategy {
void Insert(PetShop.Model.OrderInfo order);
}OrderAsynchronous代码:
public class OrderAsynchronous : IOrderStrategy
{
// 通过消息工厂来获取消息队列里的定单
private static readonly PetShop.IMessaging.IOrder asynchOrder = PetShop.MessagingFactory.QueueAccess.CreateOrder();
/// <summary>
/// 这个方法系列话表单对象并把进行异步过程处理
/// </summary>
/// <param name="order">表单信息</param>
public void Insert(PetShop.Model.OrderInfo order) {
asynchOrder.Send(order);
}
}OrderSynchronous代码:
public class OrderSynchronous : IOrderStrategy {
// 通过数据访问工厂来创建定单
private static readonly PetShop.IDAL.IOrder dal = PetShop.DALFactory.DataAccess.CreateOrder();
/// <summary>
/// 插入定单并并通过事务处理来更新条目
/// </summary>
/// <param name="order">表单信息</param>
public void Insert(PetShop.Model.OrderInfo order) {
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required)) {
dal.Insert(order);
// 在表单提交后,更新现有定单条目
Inventory inventory = new Inventory();
inventory.TakeStock(order.LineItems);
//事务提交.
ts.Complete();
}
}
}所以策略模式就是这么简单,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速。它只要修改实例化对象就可以了,例如IOrderStratery order = new OrderAsynchronous();改成IOrderStratery order = new OrderSynchronous();就能从异步处理改成同步处理了,其他代码就可以不用更改。


浙公网安备 33010602011771号