Java记录 -66- 策略模式

策略模式(Strategy):

策略模式中体现了两个非常基本的面向对象设计的原则:

l 封装变化的概念;

l 编程中使用接口,而不是对接口实现;

面向接口的编程

策略模式的定义:

l 定义一组算法,将每个算法都封装起来,并且使他们之间都可以互换;

l 策略模式使这些算法在客户端调用它们的时候能够互不影响的变化;

策略模式的意义:

l 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系;

l 弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性;

策略模式的组成:

l 抽象策略角色:策略类,通常由一个接口或者抽象类实现;

l 具体策略角色:包装了相关的算法和行为;

l 环境角色:持有一个策略类的引用,最终给客户端调用的。

策略模式的实现:

l 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换;

l 策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来;

l 环境类负责维护和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。

策略模式的编写步骤:

1. 对策略对象定义一个公共接口;

2. 编写策略类,该类实现了上面的公共接口;

3. 在使用策略对象的类中保存一个对策略对象的引用;

4. 在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值;

策略模式的缺点:

1. 客户端必须指定所有的策略类,并 自行决定使用哪一个策略类;

2. 造成很多的策略类;(采用工厂方法可以解决该问题)

时间: 2024-10-21 12:05:08

Java记录 -66- 策略模式的相关文章

Java设计模式1——策略模式(Strategy Pattern)

最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解,用自己的方式记录下来. 上第一章的策略模式之前讲个故事,解释一下类设计的背景:刘备要去江东娶老婆,临走时诸葛亮给伴郎赵云三个锦囊妙计,嘱咐按天机拆开解决棘手问题.这才有了后来的周瑜赔了夫人又折兵.三个妙计放在锦囊中,赵云从锦囊中取妙计获胜.先看类图: 1.三个妙计是具体的实现类,我们设计一个接口,再写三个实现

java设计模式之策略模式

策略模式 模拟鸭子游戏SimUDuck 设计原则: 找出应用中需要变化之处,把它们独立出来,不需要和那些变化的代码混在一起 设计原则: 针对接口编程,而不是针对实现编程 设计原则: 多用组合,少用继承 策略模式定义: 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户 1 public class MiniDuckSimulator 2 { 3 public static void main(String[] args) 4 { 5 //绿头鸭 6 Duc

Java 设计模式之 策略模式

思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心,我的追 MM 锦囊中有好多 Strategy 哦.策略模式: 策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换. 策略模式使得算法可以在不影响到客户端的情况下发生变化.策略模式把行为和环境分开.环境类负责维持和查询行为类,各种算法在具体的策略类中提供.由于算

java设计模式之——策略模式

1.策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为. 2.设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为.下面是一个例子. 策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响 到客户端的情况下发生变化.通常,策略模式适用于当一个应用程序需

JAVA中的策略模式strategy

原文出自:http://ttitfly.iteye.com/blog/136467 1. 以一个算术运算为例,传统做法为: java 代码 package org.common; public class Calculate { public String getResult(float a,float b,char c){ float add = a+b; float sub = a-b; float mult = a*b; float division = a/b; switch(c){ c

java设计模式7.策略模式、模板方法模式、观察者模式

策略模式 策略模式的用意,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 环境角色:持有一个抽象策略角色的引用. 抽象策略角色:给出所有的具体策略类所要实现的接口. 具体策略角色:包装相关的算法或行为. 模板方法模式 模板方法的用意,使用一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以用不同的方式来实现这些抽象方法. 抽象模板角色:1. 定义一个或多

折腾Java设计模式之策略模式

博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使用 一个系统有许多许多类,而区分它们的只是他们直接的行为. 如何解决 将这些算法封装成一个一个的类,任意地替换. 主要角色 上下文C

Java设计模式之策略模式(Strategy)

前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个参数过去来对参数进行不同的加密算法,这样会让代码难以维护而且难以扩展,那该如何解决呢?今天来学习一下策略模式Strategy!用它来解决这个问题. 策略模式:        策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模

Java与设计模式-策略模式

在实际开发中,可能会遇到这样一个情况,某一功能的实现分为多种算法,这些算法可以认定为策略,在实际操作时选择不同算法或策略进行操作得出最终结果.在实际生活中,这些例子也是举不胜举,例如,商场举行活动,满100元减10元,满200元减30元,满500元减100元等等...这样每消费一笔,根据这一笔钱消费的多少,计算最终应支付的钱对应着不同的算法,这些对应的不同计算方法就可以认定为是不同的策略.在某东购物时,根据不同的用户等级,打折力度也是不同的. 策略模式的UML类图参照下图: 假如没有策略模式,实

java设计模式之策略模式总结

策略模式的定义:(定义截自http://www.cnblogs.com/whgk/p/6087064.html) 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 换句话讲,也就是将那些使用的方法分别封装成独立的类,然后将这一类使用接口统一管理起来,让需要使用这些方法的用户能够随时调用它们.上面例子中的战斗行为就相当于定义中的算法一词.只是换了个说法而已. 缺点: 1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类.这就意味着客户端必