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