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();就能从异步处理改成同步处理了,其他代码就可以不用更改。