




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、创新设计模式之策略模式讲义目 录 Contents1234定义和角色结构示意图例如代码实例说明5优缺点环境定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以互相替换。策略模式让算法独立于使用它的客户而独立变化。定义和角色结构示意图例如代码实例说明优缺点和环境角色三种:策略接口:用来约束一系列具体的策略算法。策略实现:就是具体的算法实现。上下文:负责和具体的策略类交互,通常上下文会持有一个真正的策略实现。还可以让具体的策略类来获取上下文的数据,甚至让具体的策略类来获取上下文的数据。角色之间的关系:上下文使用策略接口来调用具体的策略实现定义的算法。定义和角色结构示意图例如
2、代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图例如代码实例说明5优缺点和环境策略实现算法实现定义和角色结构示意图例如代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图例如代码实例说明5优缺点和环境1、策略接口:定义算法的接口:调用具体的算法定义和角色结构示意图例如代码实例说明优缺点和环境2、策略实现:在具体的算法实现中,定义了三个,分别是ConcreteStrategyA、ConcreteStrategyB、ConcreteStrategyC,例如非常简单,由于没有具体算法的实现,三者也就是名称不同,例如代码如下:定义和角色结构示意图例如
3、代码实例说明优缺点和环境3、上下文的实现:例如代码如下例如上文提到A,B,C三个对象定义和角色结构示意图例如代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图例如代码实例说明5优缺点和环境实例:报价管理问题向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要报不同的价格,例如有新客户、老客户、大客户等。为了演示的简洁性,假定现在需要实现一个简化的报价管理,实现如下的功能:1对普通客户或者是新客户报全价2对老客户报的价格,统一折扣5%3对大客户报的价格,统一折扣10%该怎么实现呢?定义和角色结构示意图例如代码实例说明优缺点和环境1、不用模式
4、的解决方案:这种解决方案存在的问题:价格类包含了所有计算报价的算法,使得价格类,尤其是报价这个方法比较庞杂,难以维护。定义了计算价格的算法定义和角色结构示意图例如代码实例说明优缺点和环境2、不用模式的修改方案:把这些算法从报价方法里面拿出去,形成独立的方法。据此写出如下的实现代码,例如代码如下:把算法从报价方法里拿出去,形成独立的方法,这里调用了算法定义和角色结构示意图例如代码实例说明优缺点和环境新客户和普通客户老客户大客户这样做的优点是:容易扩展,较好的维护。缺点是:如果有100种情况时,怎么做?定义和角色结构示意图例如代码实例说明优缺点和环境3、策略模式下的解决方案:要使用策略模式来重写前
5、面报价的例如,大致有如下改变:首先需要定义出算法的接口。策略接口然后把各种报价的计算方式单独出来,形成算法类。策略实现对于Price这个类,把它当做上下文,在计算报价的时候,不再需要判断,直接使用持有的具体算法进行运算即可。选择使用哪一个算法的功能挪出去,放到外部使用的客户端去。上下文实例的结构图定义和角色结构示意图例如代码实例说明优缺点和环境先看策略接口,例如代码如下:定义和角色结构示意图例如代码实例说明优缺点和环境 接下来看看具体的算法实现,不同的算法,实现也不一样,先看为新客户或者是普通客户计算应报的价格的实现,例如代码如下:定义和角色结构示意图例如代码实例说明优缺点和环境老客户计算应报
6、的价格的实现,例如代码如下:定义和角色结构示意图例如代码实例说明优缺点和环境大客户计算应报的价格的实现,例如代码如下:定义和角色结构示意图例如代码实例说明优缺点和环境接下来看看上下文的实现,也就是原来的价格类,它的变化比较大,主要有:原来那些私有的,用来做不同计算的方法,已经去掉了,独立出去做成了算法类原来报价方法里面,对具体计算方式的判断,去掉了,让客户端来完成选择具体算法的功能新添加持有一个具体的算法实现,通过构造方法传入原来报价方法的实现,变化成了转调具体算法来实现定义和角色结构示意图例如代码实例说明优缺点和环境定义和角色结构示意图例如代码实例说明优缺点和环境写个客户端来测试运行一下,例
7、如代码如下:定义和角色结构示意图例如代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图例如代码实例说明5优缺点和环境优点:1、 策略模式提供了管理相关的算法族的方法。恰当使用继承可以把公共的代码转移到父类里面,从而防止重复的代码。2、 策略模式提供了可以替换继承关系的方法。继承可以处理多种算法或行为。3、 使用策略模式可以防止使用多重条件转移语句。如果采用多重转移语句将不易维护.定义和角色结构示意图例如代码实例说明优缺点和环境缺点:1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。2、 策略模式造成很
8、多的策略类,每个具体策略类都会产生一个新类,使得策略类变得很复杂。定义和角色结构示意图例如代码实例说明优缺点和环境应用环境: 1、实现某特定功能在不同的情况下采用不同的策略即算法,程序在运行时动态选择所要采用的策略。 2、对客户端完全隐藏算法的具体实现细节。 3、不同种算法之间可以彼此替换且完全独立。定义和角色结构示意图例如代码实例说明优缺点和环境设计模式之模板方法模式主讲人 :孙 晗时 间:目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系定义:一个抽象类中,有一个主方法,再定义1n个方法,这些方法可以是抽象的,也可以是具体的;定义一个类,继承该抽象类,重写
9、抽象方法,通过调用抽象类,实现对子类的调用。意图:模板方法模式是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。定义和角色结构示意图实例说明区别与联系优缺点和环境角色两种:抽象模板类:定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做根本操作,它们是一个顶级逻辑的组成步骤定义并实现了一个模板方法具体模板类:现父类所定义的一个或多个抽象方法每一个抽象模板类都可以有任意多个具体模板类与之对应,而每一个具体模板类都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同定义和角色结构示意图实例说明区别
10、与联系优缺点和环境方法两种:模板方法:一个模板方法是定义在抽象类中的,把根本操作方法组合在一起形成一个总算法或一个总行为的方法。一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。根本方法:抽象方法:由抽象类声明,由具体子类实现,java语言中以abstract关键字标出来。具体方法:由抽象类声明并实现,而子类并不实现或置换,java中没有abstract关键字。钩子方法:有抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。因此,此方法的存在,可以让子类有能力对算法的不同点进行挂钩,要不要挂钩,由子类自行决定。定义和
11、角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系创立一个模板(抽象)类:Beverage(饮料)模板方法给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们推迟到子类中去实现定义和角色结构示意图实例说明区别与联系优缺点和环境这就实现了模板方法中最重要的类的继承和方法的复用创立一个咖啡类(Coffee)和茶(Tea)类,都继承Beverage抽象类,而各个方法的具体实现方式都不同定
12、义和角色结构示意图实例说明区别与联系优缺点和环境运行结果测试类定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系优点1模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展和代码复用。2通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原那么。3使用模板方法是系统扩展性得到增强,最小化了变化对系统的影响。定义和角色结构示意图实例说明区别与联系优缺点和环境缺点1每个不同的实现都需要定义一个子类,这会导致类的个数的增加,也会增加很多具体方法的数量,使设计更加抽象。2如果选用的实现方式不当,复用情况会很差。定义和角色结构示意图实例说明区别与联系优缺点和环境应用范围:子类具有统一的操作步骤或操作过程;子类具有不同的操作细节;存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同。定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7 生命最宝贵(教学设计)-部编版道德与法治 三年级上册
- 上海市金山区九年级历史上册 第三单元 近代社会的发展与终结 第17课 电气时代的来临教学设计 北师大版
- 七年级生物下册 4.6.4《激素调节》教学设计2 (新版)新人教版
- 深龋护理查房
- 线上教学作业设计与管理
- 2023二年级数学上册 三 表内乘法(一)第4课时 乘加、乘减教学设计 苏教版
- Module 9 Unit 1 Are you going to run on sports day(教学设计)-2024-2025学年外研版(三起)英语四年级上册
- 论文摘要与答辩准备
- 2024年五年级数学下册 三 长方体和正方体单元概述与课时安排教学设计 冀教版
- 23 梅兰芳蓄须(教学设计)2024-2025学年部编版语文四年级上册
- 北京市朝阳区2025届高三一模质量检测一 语文试题(含答案)
- 新教材高中生物选择性必修2课件:1 2 种群数量的变化(人教版)
- 车辆租赁服务保障计划
- 《装配式混凝土建筑》全套教学课件
- (二模)温州市2025届高三第二次适应性考试语文试卷(含答案)
- 2024-2025学年人教版数学八年级下册第一次月考模拟练习(含答案)
- 2025届河北省承德市、张家口市高三下学期一模考试英语试题(含答案)
- 2024山西云时代技术有限公司社会招聘59人笔试参考题库附带答案详解
- Unit+4+Eat+Well+Section+A+2a~2e课件-2024-2025学年人教版(2024)英语七年级下册+
- 肥胖中医养生知识讲座
- 2025年部编版新教材语文一年级下册期中测试题(有答案)
评论
0/150
提交评论