[设计模式] 21 策略模式 Strategy】的更多相关文章

在GOF的<设计模式:可复用面向对象软件的基础>一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.该模式使得算法可独立于使用它的客户而变化. 策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况.就像上面的加班工资,不同的加班情况,有不同的算法.我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的.这就是策略模式. Strategy:定义所有支持的算法的公共接口.Context使用…
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabcd 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里(两种可互换的算法).由客户端决定使用哪种算法. M…
简介(Introduction) 之前学习Java8实战时,遇到一个很好的策略模式示例.便想着借着这个示例结合反馈式的方法来,学习策略设计模式,也以便后面反复琢磨学习. 首先我们通过练习,逐步写出符合相应需求的代码,再根据需求进行改进.比较.重写,最终得出一种更灵活的最佳实现. 练习 /** 该类为苹果 */ class Apple { private Float weight; private String color; } /** 该类为苹果过滤器 */ public class Apple…
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法. 介绍 什么是策略模式(Strategy Pattern) 在软件开发过程中常常遇到这样的情况, 实现某一个功能有很多种算法或实现策略, 我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能. 如果将这些算法或者策略抽象…
策略模式… Strategy Pattern  在POS系统中,有时需要实行价格优惠, 该如何处理?  对普通客户或新客户报全价  对老客户统一折扣5%  对大客户统一折扣10%  注:课件来自Head-First OOAD课程资料1.1 假设背景  Joe是一个OO程序员,所在的公司正在开发一款仿真游戏软件 “SimUDuck”,他的任务是完成游戏的重要功能 Joe works at a company that produces a simulation game called…
策略模式(Strategy Pattern) 介绍定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里(两种可互换的算法).由客户端决定使用哪种算法. MessageModel using System; using System.Collections.Generic; using System.Text; na…
一,总体概要 1,笔者浅谈 策略模式,又叫算法簇模式,就是定义了不同的算法,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 策略模式和工厂模式有一定的类似,策略模式相对简单容易理解,并且可以在运行时刻自由切换.工厂模式重点是用来创建对象. 策略模式应用比较广泛,比如:我们现在要定义数据交换格式,现有三种方案可选1,XML  2,JSON  3,CSV就可以使用策略模式实现. 这里我要强调的是------我们是针对不同数据源选择不同方案,针对的都是同一事物做相同意图的操作只是方案不…
/** * 策略设计模式 * 策略模式:定义一系列的算法族,使他们之间可以相互转换,动态的改变其行为. * 问题:设计一个鸭子模拟游戏. * 现在有一群鸭子: * ①这些鸭可以有飞的行为(分为快和慢),也可以没有飞的行为: * ②对于鸭的叫声有沉默,也有响亮地叫,或者说也有小声地叫.那么按照我们平时的设计习惯,我们首先会定义一个父类(鸭), * 然后我们将这两种行为排列组合将产生3*3=9个鸭子的子类,这是一件多么费体力的事情.如果说还有另外一些行为呢,那又要乘了,所以这种设计方式显然不好. *…
策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响使用算法的用户. 针对商城收银模式,打折,返现促销等的例子: 打折还是促销其实都是一些算法,可以用工厂模式来生成算法对象,但算法本身只是一种策略,重要的是这些算法随时都可能替换的,而封装变化点是我们面向对象的一种重要的思维方式,首先来看下策略模式的结构图和基本代码: 1)结构图 2)代码 strategy类,定义所有支持的方法的公共接口 public abstract class Strategy { /…
//---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.使算法可独立于使用它的客户而变化. 2:别名: 政策(Policy) 3:动机: 4:适用性: 1>许多相关的类仅仅是行为有异.策略提供了一种用多个行为中的一个行为来配置一个类的方法. 2>需要使用一个算法的不同变体. 3>算…
结构 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 许多相关的类仅仅是行为有异.“策略”提供了一种用多个行为中的一个行为来配置一个类的方法. 需要使用一个算法的不同变体.例如,你可能会定义一些反映不同的空间/时间权衡的算法.当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式. 算法使用客户不应该知道的数据.可使用策略模式以避免暴露复杂的.与算法相关的数据结构. 一个类定义了多种行为, 并且这些行…
策略模式中体现了两个非常基本的面向对象设计的原则:1.封装变化的概念.2.编程中使用接口,而不是对接口的实现. 策略模式的定义:定义一组算法,将每个算法都封装起来,并使它们之间可以互换.策略模式使这些算法在客户端调用它们的时候能够互不影响地变化. 策略模式的意义:策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系. 弱连接的特性使软件具有更强的可扩展性,易于维护:更重要的是,它大大提高了软件的可重用性. 策略模式的组成1.抽象策略角色:策略类,通常由一个接口…
概述 描述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法的变化不会影响到使用算法的客户. 套路 Context(环境类) 负责使用算法策略,其中维持了一个抽象策略类的引用实例. Strategy(抽象策略类) 所有策略类的父类,为所支持的策略算法声明了抽象方法.它既可以是抽象类也可以是接口 ConcreteStrategy(具体策略类) 实现了在抽象策略类中声明的方法. 策略模式可以和简单工厂模式搭配使用 使用场景 如果在一个系统里面有许多类,它们…
策略模式原理:策略模式和简单工厂模式有点类似,只是简单工厂模式产生的是对象,策略模式产生的是根据对象产生的算法. 代码如下: #include <iostream> #include <string> #include <vector> using namespace std; enum CACHE{FIFO,LRU,RANDOM}; class ReplaceAlgorithm { public: virtual void replace(){} }; class F…
前言:[模式总览]——————————by xingoo 模式意图 定义一系列的算法,把他们封装起来,使得算法独立于适用对象. 比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有.因此把每一个排序当做一个策略对象,客户调用哪个对象,就使用对应的策略方法. 应用场景 1 当许多的类,仅仅是行为或者策略不同时,可以把行为或策略单独提取出来,这样主体的类就可以进行统一了. 2 需要使用不同的算法. 3 一个类定义了多种行为. 模式结构 Context 环境角色的,策略的调用者 cla…
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地方没有点明使用的是那种设计模式.从今天开始,我们就围绕着设计模式这个主题来讨论一下我们常用的设计模式,当然“GoF”的23种设计模式不会全部涉及到,会介绍一些常见的设计模式.在接下来我们要分享的设计模式这个系列博客中,还是以Swift语言为主来实现每种设计模式的Demo.并且仍然会在GitHub上进…
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,通过if-else-或者case等条件判断语句来进行选择.这…
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕该功能.如查找.排序等,一种经常使用的方法是硬编码(Hard Coding)在一个类中,如须要提供多种查找算法,能够将这些算法写到一个类中,在该类中提供多个方法,每个方法相应一个详细的查找算法:当然也能够将这些查找算法封装在一个统一的方法中,通过if-else-或者case等条件推断语句来进行选择.…
策略模式 Strategy   与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会有不同的话术: 面对购物总价的范围,很可能会有不同的折扣方案: 面对理解能力不同的学生,必然有不同的教学策略:   而在我们程序的世界里,“策略”就是分情况讨论.也就是类似状态模式中的条件分支或者选择分支. 只不过状态模式中是事物的不同状态,而策略模式中关注的是处理方法. 比如 if(totalPr…
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的组成: —抽象策略角色: 策略类,通常由一个接口或者抽象类实现.  —具体策略角色:包装了相关的算法和行为.  —环境角色:持有一个策略类的引用,最终给客户端调用.  2,策略模式适场景 (1)多个相关的类中,仅行为不同,即一个系统中需要在几个不同的…
1.分析项目中变化部分与不变部分 2.多用组合,少用继承:用行为类组合,而不是行为的继承 案例: 第一步,把行为抽象为接口 package top.littlepage.designPattern.Strategy; public interface FlyBehavior { void fly(); } 第二步,把具体行为用实体类实现 package top.littlepage.designPattern.Strategy; public class BadFly implements Fl…
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 一.策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.用一句话来说,就是:"准备一组算法,并将每一个算法封装起来,使得它们可以互换&q…
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就制造人 父类 Person类 public abstract class Person { //唱歌可就不一样了,唱法不同,唱功不同:而且哑巴不能唱歌 public void singing(){ System.out.println("我要唱歌"); } //吃饭,大家没什么区别吧 pu…
本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过对比和实例介绍,相信应该会一些比较深刻的感知.最后在结合个人的体会简单聊一下对这两个模式的一些看法. 1. 模式概念 1.1 策略模式 运行时更改类的行为或算法,从而达到修改其功能的目的: 使用场景: 一个系统需要动态地在几种算法中选择一种,而这些算法之间仅仅是他们的行为不同. 此外决策过程中过多的…
前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个参数过去来对参数进行不同的加密算法,这样会让代码难以维护而且难以扩展,那该如何解决呢?今天来学习一下策略模式Strategy!用它来解决这个问题. 策略模式:        策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模…
定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费方式 效果图: 结构图: HTML代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>设计模式:策略模式</title>…
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全部, 禁止转载, 如有须要, 请站内联系. 策略模式: 定义了算法族, 分别封装起来, 让它们之间能够相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族须要常常扩展新的功能, 为了使用父类比較灵活的加入子类, 把父类的行为写成接口(interface)的形式; 使用set()方法…
策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立出来,不要和哪些不需要变化的代码混在一起. 理解1:把会变化的部分取出来并[封装]起来,好让其他部分不会受到影响. 理解2:把会变化的部分取出并封装起来,以便以后可以方便的扩充此部分,而不影响不需要变化的部分 第二个设计原则:针对接口编程,而不是针对实现编程. [针对接口编程]真正的意思是[针对超类…
在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选择学习策略模式. 策略模式:定义了一系列家族算法,并对每一种算法单独封装起来,让算法之间可以相互替换,独立于使用算法的客户. 通常我并不会记得“牛顿第一定律”的具体内容,所以我也难保证我会对这个定义记得多久……用FE经常见到的东西来举个例子说明一下: $("div").animation(…
原文地址:http://blog.csdn.net/hguisu/article/details/75582491.策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.也称为政策模式(Policy).2.适用性    当存在以下情况时使用Strategy模式    1)• 许多相关的类仅仅是行为有异. “策略”提供了一种用多个行为中的一个行为来配置一个类的方法.即一个系统需要动态地在几种算法中选择一种.    2)• 需要使用一个算…