欢迎来到天天文库
浏览记录
ID:1203514
大小:2.83 MB
页数:23页
时间:2017-11-08
《24 c#设计模式-策略模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DesignPatterns策略模式刘伟(Sunny)weiliu_china@126.com大纲策略模式概述策略模式的结构与实现策略模式的应用实例PetShop4.0中的订单处理策略模式的优缺点与适用环境策略模式概述旅游出行方式示意图策略模式概述分析实现某个目标的途径不止一条,可根据实际情况选择一条合适的途径软件开发:多种算法,例如排序、查找、打折等使用硬编码(HardCoding)实现将导致系统违背开闭原则,扩展性差,且维护困难可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法策略类策略模式策略模式概述策略模式的定义对象行
2、为型模式策略模式:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户变化。StrategyPattern:Defineafamilyofalgorithms,encapsulateeachone,andmaketheminterchangeable.Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit.策略模式概述策略模式的定义又称为政策(Policy)模式每一个封装算法的类称之为策略(Strategy)类策略模式提供了一种可插
3、入式(Pluggable)算法的实现方案策略模式的结构与实现策略模式的结构策略模式的结构与实现策略模式的结构策略模式包含以下3个角色:Context(环境类)Strategy(抽象策略类)ConcreteStrategy(具体策略类)策略模式的结构与实现策略模式的实现典型的抽象策略类代码:abstractclassAbstractStrategy{publicabstractvoidAlgorithm();//声明抽象算法}策略模式的结构与实现策略模式的实现典型的具体策略类代码:classConcreteStrategyA:AbstractS
4、trategy{//算法的具体实现publicoverridevoidAlgorithm(){//算法A}}策略模式的结构与实现策略模式的实现典型的环境类代码:classContext{privateAbstractStrategystrategy;//维持一个对抽象策略类的引用publicvoidSetStrategy(AbstractStrategystrategy){this.strategy=strategy;}//调用策略类中的算法publicvoidAlgorithm(){strategy.Algorithm();}}策略模式的结
5、构与实现策略模式的实现典型的客户端代码片段:……Contextcontext=newContext();AbstractStrategystrategy;strategy=newConcreteStrategyA();//可在运行时指定类型,通过配置文件和反射机制实现context.SetStrategy(strategy);context.Algorithm();……策略模式的应用实例实例说明某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下:(1)学生凭学生证可享受票价8折
6、优惠。(2)年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元)。(3)影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。该系统在将来可能还要根据需要引入新的打折方式。现使用策略模式设计该影院售票系统的打折方案。策略模式的应用实例实例类图电影票打折方案结构图策略模式的应用实例实例代码(1)MovieTicket:电影票类,充当环境类(2)Discount:折扣类,充当抽象策略类(3)StudentDiscount:学生票折扣类,充当具体策略类(4)ChildrenDisco
7、unt:儿童票折扣类,充当具体策略类(5)VIPDiscount:VIP会员票折扣类,充当具体策略类(6)配置文件App.config(7)Program:客户端测试类演示……参考代码(DesignPatternStrategySample)策略模式的应用实例结果及分析如果需要更换具体策略类,无须修改源代码,只需修改配置文件即可,完全符合开闭原则8、gySample.ChildrenDiscount"/>PetShop4.0中的订单处理PetShop4
8、gySample.ChildrenDiscount"/>
此文档下载收益归作者所有