




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式之策略模式主讲人 :成 玉 丹时 间:2016.11.14目 录 Contents1234定义和角色结构示意图示例代码实例说明5优缺点环境定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以互相替换。策略模式让算法独立于使用它的客户而独立变化。定义和角色结构示意图示例代码实例说明优缺点和环境角色(三种):策略接口策略接口:用来约束一系列具体的策略算法。策略实现策略实现:就是具体的算法实现。上下文上下文:负责和具体的策略类交互,通常上下文会持有一个真正的策略实现。还可以让具体的策略类来获取上下文的数据,甚至让具体的策略类来获取上下文的数据。角色之间的关系:上下文使
2、用策略接口来调用具体的策略角色之间的关系:上下文使用策略接口来调用具体的策略实现定义的算法。实现定义的算法。定义和角色结构示意图示例代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图示例代码实例说明5优缺点和环境策略实现(算法实现)策略实现(算法实现)定义和角色结构示意图示例代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图示例代码实例说明5优缺点和环境1 1、策略接口策略接口:定义算法的接口:定义算法的接口:调用具体的算法调用具体的算法定义和角色结构示意图示例代码实例说明优缺点和环境2 2、策略实现:在具体的算法实现中,定义了三个,分别策略
3、实现:在具体的算法实现中,定义了三个,分别是是ConcreteStrategyAConcreteStrategyA、ConcreteStrategyBConcreteStrategyB、ConcreteStrategyCConcreteStrategyC,示例非常简单,由于没有具体算法,示例非常简单,由于没有具体算法的实现,三者也就是名称不同,示例代码如下:的实现,三者也就是名称不同,示例代码如下:定义和角色结构示意图示例代码实例说明优缺点和环境3、上下文的实现:示例代码如下上下文的实现:示例代码如下例如上文提到例如上文提到A,B,CA,B,C三个对象三个对象定义和角色结构示意图示例代码实例说
4、明优缺点和环境目 录 Contents1234定义和角色结构示意图示例代码实例说明5优缺点和环境实例:实例:报价管理问题报价管理问题向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要报不同的价格,例如有新客户、老客户、大客户等。为了演示的简洁性,假定现在需要实现一个简化的报价管理,实现如下的功能:1)对普通客户或者是新客户报全价2)对老客户报的价格,统一折扣5%3)对大客户报的价格,统一折扣10%该怎么实现呢?定义和角色结构示意图示例代码实例说明优缺点和环境1 1、不用模式的解决方案:不用模式的解决方案:这种解决方案存在的问题:这种解决方案存在的问题:价格类包含
5、了价格类包含了所有计算报价的算法,使得价格类,尤其所有计算报价的算法,使得价格类,尤其是报价这个方法比较庞杂,难以维护。是报价这个方法比较庞杂,难以维护。定义了计算价格定义了计算价格的算法的算法定义和角色结构示意图示例代码实例说明优缺点和环境2 2、不用模式的不用模式的修改修改方案:方案:把这些算法从报价方法里面拿出去,形成独立的方法。据此写出如下的实现代码,示例代码如下:把算法从报价方法里拿把算法从报价方法里拿出去,形成独立的方法,出去,形成独立的方法,这里调用了算法这里调用了算法定义和角色结构示意图示例代码实例说明优缺点和环境新客户和普通客户老客户大客户这样做的优点是:容易扩展,较好的维护
6、。这样做的优点是:容易扩展,较好的维护。缺点是:如果有缺点是:如果有100100种情况时,怎么做?种情况时,怎么做?定义和角色结构示意图示例代码实例说明优缺点和环境3 3、策略、策略模式模式下下的的解决解决方案:方案:要使用策略模式来重写前面报价的示例,大致有如下改变:首先需要定义出算法的接口。(策略接口)(策略接口)然后把各种报价的计算方式单独出来,形成算法类。(策略实现)(策略实现)对于Price这个类,把它当做上下文,在计算报价的时候,不再需要判断,直接使用持有的具体算法进行运算即可。选择使用哪一个算法的功能挪出去,放到外部使用的客户端去。(上下文)(上下文)实实例例的的结结构构图图定义
7、和角色结构示意图示例代码实例说明优缺点和环境先看策略接口,示例代码如下:先看策略接口,示例代码如下:定义和角色结构示意图示例代码实例说明优缺点和环境 接下来看看具体的算法实现,不同的算法,接下来看看具体的算法实现,不同的算法,实现也不一样,先看为新客户或者是普通客户计算实现也不一样,先看为新客户或者是普通客户计算应报的价格的实现,示例代码如下:应报的价格的实现,示例代码如下:定义和角色结构示意图示例代码实例说明优缺点和环境老客户计算应报的价格的实现,示例代码如下:老客户计算应报的价格的实现,示例代码如下: 定义和角色结构示意图示例代码实例说明优缺点和环境大客户计算应报的价格的实现,示例代码如下
8、大客户计算应报的价格的实现,示例代码如下:定义和角色结构示意图示例代码实例说明优缺点和环境接下来看看上下文上下文的实现,也就是原来的价格类,它的变化比较大,主要有:原来那些私有的,用来做不同计算的方法,已经去掉了,独立出去做成了算法类原来报价方法里面,对具体计算方式的判断,去掉了,让客户端来完成选择具体算法的功能新添加持有一个具体的算法实现,通过构造方法传入原来报价方法的实现,变化成了转调具体算法来实现定义和角色结构示意图示例代码实例说明优缺点和环境定义和角色结构示意图示例代码实例说明优缺点和环境写个客户端来测试运行一下,示例代码如下:写个客户端来测试运行一下,示例代码如下:定义和角色结构示意
9、图示例代码实例说明优缺点和环境目 录 Contents1234定义和角色结构示意图示例代码实例说明5优缺点和环境优点:1、 策略模式提供了管理相关的算法族的办法。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。2、 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。3、 使用策略模式可以避免使用多重条件转移语句。如果采用多重转移语句将不易维护.定义和角色结构示意图示例代码实例说明优缺点和环境缺点:1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。2、 策略模式造成很多的策略类,每个具体策略类都会
10、产生一个新类,使得策略类变得很复杂。定义和角色结构示意图示例代码实例说明优缺点和环境应用环境: 1、实现某特定功能在不同的情况下采用不同的策略即算法,程序在运行时动态选择所要采用的策略。 2、对客户端完全隐藏算法的具体实现细节。 3、不同种算法之间可以彼此替换且完全独立。定义和角色结构示意图示例代码实例说明优缺点和环境设计模式之模板方法模式主讲人 :孙 晗时 间:2016.11.14目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系定义:一个抽象类中,有一个主方法,再定义1n个方法,这些方法可以是抽象的,也可以是具体的;定义一个类,继承该抽象类,重写抽象方法,
11、通过调用抽象类,实现对子类的调用。意图:模板方法模式是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。定义和角色结构示意图实例说明区别与联系优缺点和环境角色(两种):抽象模板类:抽象模板类:定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤定义并实现了一个模板方法具体模板类:具体模板类:现父类所定义的一个或多个抽象方法每一个抽象模板类都可以有任意多个具体模板类与之对应,而每一个具体模板类都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同定义和角色结构
12、示意图实例说明区别与联系优缺点和环境方法(两种):模板方法模板方法:一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。基本方法基本方法:抽象方法:抽象方法:由抽象类声明,由具体子类实现,java语言中以abstract关键字标出来。具体方法:具体方法:由抽象类声明并实现,而子类并不实现或置换,java中没有abstract关键字。钩子方法:钩子方法:有抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。因此,此方法的存在,可以让
13、子类有能力对算法的不同点进行挂钩,要不要挂钩,由子类自行决定。定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系创建一个模板创建一个模板( (抽象抽象) )类:类:Beverage(Beverage(饮料饮料) )模板方法给出了逻辑的骨架,而模板方法给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操逻辑的组成是一些相应的抽象操作,他们推迟到子类中去实现作,他们推迟到子类中去实现定义
14、和角色结构示意图实例说明区别与联系优缺点和环境这就实现了模板方法中最重要的这就实现了模板方法中最重要的类的继承和方法的复用类的继承和方法的复用创建一个咖啡类创建一个咖啡类( (Coffee) )和茶和茶( (Tea) )类类, ,都继承都继承Beverage抽象类抽象类,而各个方法的具体实现方式都不同,而各个方法的具体实现方式都不同定义和角色结构示意图实例说明区别与联系优缺点和环境运行结果运行结果测试类测试类定义和角色结构示意图实例说明区别与联系优缺点和环境目 录 Contents1234定义和角色结构示意图优缺点和环境实例说明5区别与联系优点(1)模板方法模式通过把不变的行为搬移到超类,去除
15、了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展和代码复用。(2)通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。(3)使用模板方法是系统扩展性得到增强,最小化了变化对系统的影响。定义和角色结构示意图实例说明区别与联系优缺点和环境缺点(1)每个不同的实现都需要定义一个子类,这会导致类的个数的增加,也会增加很多具体方法的数量,使设计更加抽象。(2)如果选用的实现方式不当,复用情况会很差。定义和角色结构示意图实例说明区别与联系优缺点和环境应用范围:子类具有统一的操作步骤或操作过程;子类具有不同的操作细节;存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同。定义和角色结构示意图实例说明区别与联系优缺点和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经编面料知识
- 终端管理工作总结
- 甜甜糖果屋课件
- 化学有机物知识点总结
- 数据库事务管理
- 2025年03月甘肃省酒泉卫星发射中心教育局公开招聘工作人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 珍惜时间心理课件
- 清明节前职工安全教育
- 灌肠操作及并发症处理课件
- 知识产权普及
- 《鹿角和鹿腿》第二课时公开课一等奖创新教学设计
- 八项规定解读
- 催收团队管理经验分享
- 重难点31 阿基米德三角形(举一反三)(新高考专用)(学生版) 2025年高考数学一轮复习专练(新高考专用)
- 药店开展药品购进渠道检查自查报告
- 职业培训师理论知识考试题及答案
- 离婚协议书无子女无共同财产范本2024年
- 2024版三方代付工程款协议书范本
- DL∕T 1910-2018 配电网分布式馈线自动化技术规范
- 用友离散行业细分领域铸造行业解决方案
- 2024年航空港区国际教育投资集团招聘笔试冲刺题(带答案解析)
评论
0/150
提交评论