Java描述设计模式(22):策略模式】的更多相关文章

本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 每年双十一,各大电商平台会推出不同的满减策略,当用户的消费金额满一定额度后,会进行减去一定的优惠额度,从而来一波清仓甩卖,使用策略模式来描述该流程. public class C01_InScene { public static void main(String[] args) { // 选择满减策略,走相应的计算方式 FullReduce strategy = new Full100 (); Payment price…
设计模式: 一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案.在真正理解设计模式之前我一直在编写“简单”的代码. 这个“简单”不是功能的简单,而是设计的简单.简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的…
策略模式(strategy pattern) 定义>> 将一系列的算法封装到一些列的类里面,并且可以相互替换 作用>> 将算法的变化独立于客户端,将算法的指责和算法的行为分开,将算法的使用和具体的算法流程区分开 组成>> 策略类:封装了一个算法实现:一般只暴漏一个方法供其它地方调用,比如排序,查找,计算折扣等等 抽象策略类:既然一种算法代表一个策略类,那么多种算法就需要定义多个策略类,这些策略类的共性是只暴漏了一个方法,而且算法的职责是相似的,算法的步骤可能是大不相同的…
原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. 因此,我们可以将dao中增删改查分开为两个部分, 一些是不变的代码,比如创建局部变量Connection conn,PreparedStatement ps,ResultSet rs等等. public int update(String sql, Object[] args) { Connect…
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替原则.依赖倒置原则.接口隔离原则.合成复用原则和迪米特法则.下面就分别介绍了每种设计原则. 1.1 单一职责原则 就一个类而言,应该只有一个引起它变化的原因.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会影响到其他的职责.另外,把多个职责耦合在一起,也会影响复用性. 1.…
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabcd 介绍 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法的变化可独立于使用它的客户. 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里(两种可互换的算法).由客户端决定使用哪种算法. M…
设计模式 从今天开始开启设计模式专栏,我会系统的分析和总结每一个设计模式以及应用场景.那么首先,什么是设计模式呢,作为一个软件开发人员,程序人人都会写,但是写出一款逻辑清晰,扩展性强,可维护的程序就不是那么容易做到了.现实世界的问题复杂多样,如何将显示问题映射到我们编写的程序中本就是困难重重.另一方面,软件开发中一个不变的真理就是“一切都在变化之中”,这种变化可能来自于程序本身的复杂度,也可能来自于客户不断变化的需求,这就要求我们在编写程序中一定要考虑变化的因素,将变化的因素抽离出来,设计出一款…
本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过对比和实例介绍,相信应该会一些比较深刻的感知.最后在结合个人的体会简单聊一下对这两个模式的一些看法. 1. 模式概念 1.1 策略模式 运行时更改类的行为或算法,从而达到修改其功能的目的: 使用场景: 一个系统需要动态地在几种算法中选择一种,而这些算法之间仅仅是他们的行为不同. 此外决策过程中过多的…
定   义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费方式 效果图: 结构图: HTML代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>设计模式:策略模式</title>…
前提: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查 找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以 将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择.这两种实现方法我们都可以称之为硬编码,如果需要增 加一种新的查找…
在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选择学习策略模式. 策略模式:定义了一系列家族算法,并对每一种算法单独封装起来,让算法之间可以相互替换,独立于使用算法的客户. 通常我并不会记得“牛顿第一定律”的具体内容,所以我也难保证我会对这个定义记得多久……用FE经常见到的东西来举个例子说明一下: $("div").animation(…
所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类似的情况,要实现某种功能可以有多种方案选择.比如,在很多地图类软件上,你想从A地点到达B地点时,为你提供几种交通工具的选择,可以查看每种交通工具的所需费用和时间.在程序语言设计中,把这种设计模式叫做策略模式. 策略模式的定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换.…
// test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include "stdafx.h"#include "test01.h" class FlyBehavior{public:    virtual void fly(){};}; class FlyWithWings:public FlyBehavior{public: void fly()…
每次看到项目中存在大量的if else代码时,都会心生一丝不安全感. 特别是产品给的需求需要添加或者更改一种if条件时,生怕会因为自己的疏忽而使代码天崩地裂,哈哈,本文的目的就是来解决这种不安全感的,23种设计模式的策略模式. GOF对策略模式的解释是: 定义一系列算法, 把它们一个个封装起来,并且使它们可相互替换(变化).该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展, 子类化). 策略模式结构图如下: 生活中商场搞活动给消费者派送了一批优惠券,优惠券分三种, 一种是满减券满100…
博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使用 一个系统有许多许多类,而区分它们的只是他们直接的行为. 如何解决 将这些算法封装成一个一个的类,任意地替换. 主要角色 上下文C…
最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解,用自己的方式记录下来. 上第一章的策略模式之前讲个故事,解释一下类设计的背景:刘备要去江东娶老婆,临走时诸葛亮给伴郎赵云三个锦囊妙计,嘱咐按天机拆开解决棘手问题.这才有了后来的周瑜赔了夫人又折兵.三个妙计放在锦囊中,赵云从锦囊中取妙计获胜.先看类图: 1.三个妙计是具体的实现类,我们设计一个接口,再写三个实现…
首先,我们来看下策略模式的概念.一般的解释如下:     策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently fro…
一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一项功能时,有些需要经常变化的算法我们需要就独立的抽取出来,将使用抽象的引用为在具体的功能类中标示,并且在程序运行时能够动态的改变这些算法功能. 三. 设计原则   设计模式告诉我们: (1). 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起. (2). 要针对接口编程…
今年寒假没有回家,打算利用这个假期的时间进行学习设计模式,这一个人感觉比较牛的知识,前一段时间一直在忙着搞自己的专业课,还有就是捣鼓了一下Linux系统,没有好好的学习关于Java还有Android方面的知识.我想学习设计模式的原因是在于大二暑假的时候自己做了一自己的APP,有点商业化的软件.在做这个APP的过程中,我发现了很多的问题,比如自己在实现功能的时候会为了一个共同的功能需要写很多的重复的代码,这也让我很苦恼,当然当时也接触了一些的设计模式比如单例模式之类的.所以这就滋生了我学习设计模式…
策略模式:1.分析项目中的变化部分与不变部分(每个设计模式都要分析的)2.多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性直接上代码: package com.wz.oneStrategist;/** * 动物类(基类) * * @author Administrator * @create 2018-04-17 21:10 */public class Animal { AnimalRun ar ; public Animal(AnimalRun ar) { this.ar = ar…
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户体验,必须给六个按钮,按照价格升序降序,按照档次升序降序,按照重量升序降序. (这里只是打个比方,好像一般遇到这种情况是用Lucenc) 2.不用策略模式 package com.dingyu; import java.util.Arrays; /** * 产品类,这里为了代码代码尽可能的少,set…
简介 策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 组成 1.抽象策略角色(Strategy): 策略类,通常由一个接口或者抽象类实现. 2.具体策略角色(ConcreteStrategy):包装了相关的算法和行为. 3.环境角色(Context):持有一个策略类的引用,最终给客户端调用. 类图 使用场景 1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为. 2.一个…
前言 前阵子面试的时候,有个面试官问我了解哪些设计模式吗?我说了策略模式.接着他问有哪些场景应用,我又回答他jdk的集合工具类有个排序方法就用到了策略模式,也就是java.util包下的Collections类,该类中有个sort方法,我们可以自定义排序规则实现集合的定制排序,这就是策略模式最直接的应用,说完之后他点点头,料想对我的回答还是比较满意吧,当然我也只是在这道面试题上装装逼而已,毕竟最后面试结束时他说了句请回去等消息吧.... 什么是策略模式 言归正传,今天我们学习设计模式系列的策略模…
思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心,我的追 MM 锦囊中有好多 Strategy 哦.策略模式: 策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换. 策略模式使得算法可以在不影响到客户端的情况下发生变化.策略模式把行为和环境分开.环境类负责维持和查询行为类,各种算法在具体的策略类中提供.由于算…
策略模式 定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户(大话设计模式). 策略模式UML图   策略模式代码 古代的各种计谋都是一种策略,这次我们的例子就拿其中一种离间计来写的,理解起来非常容易,代码如下: package com.roc.strategy; /** * 这是一个策略 * @author liaowp * */ public interface StrategyInterface { /** * 执行方法 */ public…
1.策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为. 2.设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为.下面是一个例子. 策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响 到客户端的情况下发生变化.通常,策略模式适用于当一个应用程序需…
什么是设计模式? 就是一些经验.让程序代码更具弹性.好维护.代码复用的经验.而且设计模式都遵从一些OO设计原则. 题外话:以下罗列出常用的OO设计原则:链接 本文章介绍策略模式(Strategy Pattern). 一.定义: 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 二.用到的设计原则: 1 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 一般情况下,稳定的部分利用继承,变化的部分利用接口. 1 针对接口编程,…
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法. 介绍 什么是策略模式(Strategy Pattern) 在软件开发过程中常常遇到这样的情况, 实现某一个功能有很多种算法或实现策略, 我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能. 如果将这些算法或者策略抽象…
近来不太忙,就打算抽空看下源码补充一下知识,当我看了之后我发现看源码的关键是要弄清楚类之家的关系以及为何要这样的关系,否则如果只看具体的代码那不如去学习会儿算法. 于是就打算从设计模式入手,边学习边记录自己的心得体会, 如果有什么不对的地方. 欢迎各位大神指正. 策略模式 首先为什么叫策略模式,核心在于策略,说白了就是功能的实现代码. 只是这个代码不与其他类相耦合,但又与业务有关. 就拿英雄联盟举例子吧,平常玩的多些. 现在有四个英雄分别为 : 盖伦.皇子.赵信.诺手. 我们知道游戏中英雄有一个…
策略模式     定义了算法簇,分别封装起来,让他们之间可以互相替换,让算法簇的变化独立于使用算法的客户.设计原则1     找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起.设计原则2     针对接口编程,而不是针对实现编程.设计原则3     多用组合,少用继承. 下面简单的代码描述了不同的角色用武器加入战斗,同时它们也可以切换武器. 话不多说,直接撸代码 1.角色抽象类BaseCharacter /** * 角色抽象类 * @author monkjavae…