《24 C#设计模式-策略模式》由会员分享,可在线阅读,更多相关《24 C#设计模式-策略模式(23页珍藏版)》请在金锄头文库上搜索。
1、www.ChinaSA.info Design Patterns策略模式刘 伟 (Sunny)weiliu_www.ChinaSA.info 大纲w 策略模式概述w 策略模式的结构与实现w 策略模式的应用实例w PetShop 4.0中的订单处理w 策略模式的优缺点与适用环境www.ChinaSA.info 策略模式概述w 旅游出行方式示意图www.ChinaSA.info 策略模式概述w 分析实现某个目标的途径不止一条,可根据实际情况选择 一条合适的途径软件开发: 多种算法,例如排序、查找、打折等 使用硬编码(Hard Coding)实现将导致系统违背开闭原则,扩 展性差,且维护困难 可以定
2、义一些独立的类来封装不同的算法,每一个类封装一种 具体的算法策略类www.ChinaSA.info 策略模式概述w 策略模式的定义对象行为型模式策略模式:定义一系列算法,将每一个算法封装起来,并 让它们可以相互替换。策略模式让算法可以独立于使用它的 客户变化。Strategy Pattern: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use
3、 it.www.ChinaSA.info 策略模式概述w 策略模式的定义又称为政策(Policy)模式每一个封装算法的类称之为策略(Strategy)类策略模式提供了一种可插入式(Pluggable)算法的实现 方案www.ChinaSA.info 策略模式的结构与实现w 策略模式的结构www.ChinaSA.info 策略模式的结构与实现w 策略模式的结构策略模式包含以下3个角色:Context(环境类)Strategy(抽象策略类)ConcreteStrategy(具体策略类)www.ChinaSA.info 策略模式的结构与实现w 策略模式的实现典型的抽象策略类代码:abstract c
4、lass AbstractStrategy public abstract void Algorithm(); /声明抽象算法 www.ChinaSA.info 策略模式的结构与实现w 策略模式的实现典型的具体策略类代码:class ConcreteStrategyA : AbstractStrategy /算法的具体实现 public override void Algorithm() /算法A www.ChinaSA.info 策略模式的结构与实现w 策略模式的实现典型的环境类代码:class Context private AbstractStrategy strategy; /维维持一
5、个对对抽象策略类类的引用 public void SetStrategy(AbstractStrategy strategy) this.strategy = strategy; /调调用策略类类中的算法 public void Algorithm() strategy.Algorithm(); www.ChinaSA.info 策略模式的结构与实现w 策略模式的实现典型的客户端代码片段: Context context = new Context(); AbstractStrategy strategy; strategy = new ConcreteStrategyA(); /可在运行时时
6、指定类类型,通过过配置文件和 反射机制实现实现 context.SetStrategy(strategy); context.Algorithm(); www.ChinaSA.info 策略模式的应用实例w 实例说明某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为 不同类型的用户提供不同的电影票打折方式,具体打折方案如下: (1) 学生凭学生证可享受票价8折优惠。 (2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始 票价需大于等于20元)。 (3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一 定额度可换取电影院赠送的奖品。 该系统在将来可能还要根
7、据需要引入新的打折方式。现使用策略模式 设计该 影院售票系统的打折方案。www.ChinaSA.info 策略模式的应用实例w 实例类图电影票打折方案结构图www.ChinaSA.info 策略模式的应用实例w 实例代码 (1) MovieTicket:电影票类,充当环境类 (2) Discount:折扣类,充当抽象策略类 (3) StudentDiscount:学生票折扣类,充当具体策略类 (4) ChildrenDiscount:儿童票折扣类,充当具体策略类 (5) VIPDiscount:VIP会员票折扣类,充当具体策略类 (6) 配置文件App.config (7) Program:客
8、户端测试类演示参考代码 (DesignPatternStrategySample)www.ChinaSA.info 策略模式的应用实例w 结果及分析如果需要更换具体策略类,无须修改源代码,只需修 改配置文件即可,完全符合开闭原则www.ChinaSA.info PetShop 4.0中的订单处理w PetShop 4.0的BLL(Business Logic Layer ,业务逻辑层)子项目局部结构PetShop订单策略类结构图www.ChinaSA.info PetShop 4.0中的订单处理w 配置文件web.config代码片段:www.ChinaSA.info 策略模式的优缺点与适用环
9、境w 模式优点 提供了对开闭原则的完美支持,用户可以在 不修改原有系统的基础上选择算法或行为, 也可以灵活地增加新的算法或行为 提供了管理相关的算法族的办法 提供了一种可以替换继承关系的办法 可以避免多重条件选择语句 提供了一种算法的复用机制,不同的环境类 可以方便地复用策略类www.ChinaSA.info 策略模式的优缺点与适用环境w 模式缺点客户端必须知道所有的策略类,并自行 决定使用哪一个策略类将造成系统产生很多具体策略类无法同时在客户端使用多个策略类www.ChinaSA.info 策略模式的优缺点与适用环境w 模式适用环境一个系统需要动态地在几种算法中选择 一种避免使用难以维护的多重条件选择语句不希望客户端知道复杂的、与算法相关 的数据结构,提高算法的保密性与安全 性www.ChinaSA.info 思考w 在策略模式中,一个环境类 Context能否对应多个不同的策 略等级结构?如何设计?www.ChinaSA.info ENDEND