策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合

策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性的功能的对象的抽象集合才算是类。

抽象策略Strategy接口:定义所有支持的算法的公共接口, 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口

//策略接口

public interface Strategy

{

/**

*策略方法

* /

public void strategyInterface();

}

具体策略ConcreteStrategy类:封装了具体的算法或行为,实现Strategy接口

//具体策略A

public class ConcreteStrategyA implements Strategy{

@Override

public void strategyInterface(){

//相关业务

}

}

//具体策略B

public class ConcreteStrategyB implements Strategy{

@Override

public void strategyInterface(){

//相关业务

}

}

//具体策略C

public class ConcreteStrategyC implements Strategy{

@Override

public void strategyInterface(){

//相关业务

}

}

环境角色类:持有一个Strategy的引用。

public class Context{

//持有一个具体策略的对象

private Strategy strategy;

/**

*构造函数,传入一个具体策略对象

*/

public Context(Strategy strategy){

this.strategy=strategy;

}

/**

*策略方法

*/

public void contextInterface(){

strategy.strategyInterface();

}

}

客户端:

public class Client{

public static void main(String[] args){

//选择并创建需要使用的策略对象

Strategy strategy=new ConcreteStrategyA();

//创建环境

Context context=new Context(strategy);

//业务结果

context.contextInterface();

}

}

策略模式的优点:

(1)策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为,继承有助于析取出这些算法中的公共功能

(2)简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

(3)当不同行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。使用策略模式可以避免使用多重条件(if-else)语句。将这些行为封装在一个个独立的Strategy类中,可以在使用这些行为的类中消除条件语句。

策略模式的缺点:

(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。

(2) 由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观

参考链接:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html

参考书籍:《大话设计模式》

本人初学者,请大牛多指教!

转载于:https://blog.51cto.com/12124365/1939333

Java设计模式--策略模式相关推荐

  1. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

  2. java设计模式---策略模式

    1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象 ...

  3. JAVA设计模式-策略模式

    1.1 需求背景 Background:M公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下: (1)学生凭学生证可享受票价8折优惠: (2 ...

  4. 小故事说JAVA设计模式-策略模式【Strategy Pattern】

    # 弄清概念 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式 ...

  5. Java设计模式-策略模式(Strategy)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...

  6. Java设计模式——策略模式(解决满屏的if/else)

    一.业务场景 项目需要对接支付系统,根据不同客户类型会有不同的支付方式,比如:支付宝.微信.银联.云闪付等等其他第三方支付平台,这个时候策略模式就大展身手了. 传统的if/else/switch 等等 ...

  7. Java设计模式----策略模式(Strategy)

    1.  策略模式: 策略模式,也称为政策模式,定义如下: 定义一组算法,将每个算法都封装起来,使他们可以相互转化 2.  策略模式的原理是面向对象的继承和多态.策略模式的3个角色 a. Strateg ...

  8. Java设计模式策略模式(附实例代码)每天一学设计模式

    1.策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换.策略模式让算法可以独立于使用它的客户而变化. (1)Context(环境类):环境类是使用 ...

  9. Java设计模式-策略模式(一)

    一.策略模式是什么? 策略模式是指有一定行动内容的相对稳定的策略名称.策略模式在古代中又称"计策",简称"计",如<汉书·高帝纪上>:"汉 ...

最新文章

  1. python restful django_如何使用Django / Python从RESTful Web服务中使用XML?
  2. onvif 客户端 linux,Linux下onvif客户端关于ipc摄像头的搜索
  3. step1 . day1:工具准备
  4. mysql path conflict_yum安装MySQL出现conflict problem
  5. eclipse关闭讨厌的菜单
  6. Linux中find用法整理
  7. 安卓系统怎么安装软件_「软件」怎么在虚拟机里安装系统
  8. 深度学习3-tensorflow2.0模型训练-自定义模型训练
  9. Guava学习笔记(五):简化异常处理的Throwables类
  10. 转载--卷积神经网络卷积层池化层输出计算公式
  11. win10PE安装到硬盘
  12. python二叉树的非递归遍历
  13. 选择中医 - 虚寒性体质的人吃什么好(萝卜、生姜、地瓜、大蒜)
  14. 三星s窗口共享android,使用 S 窗口共享轻松让您的三星手机连接电脑
  15. Winmail + Foxmail搭建企业内部邮件系统
  16. php 判断某一天是周几,php如何判断一个日期是周几
  17. 财务分析之资产负债表
  18. SDN和NFV的关系?
  19. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
  20. 基于SC-LIO-SAM的SLAM实践

热门文章

  1. vs2010新功能(转)
  2. 友盟登陆传值+OkHttp+recyclerview展示瀑布流+跳转Intent传值+属性动画
  3. 软件测试—软件测试基础知识—(五)软件测试模型
  4. 新建虚拟机后打开虚拟机前的设置,防止ip变动
  5. python自动补全_Windows 下python的tab自动补全
  6. 前端开发,必知ES5、ES6的7种继承
  7. Web前端程序员该如何准备面试?这些面试知识应该掌握
  8. android switch控件的大小,关于Android Action Bar 上的 Switch控件
  9. java int 指针_如何在Java中使用指针?
  10. 杨云 中科院计算机所,专家人才库数据----中国科学院计算技术研究所