Java设计模式--策略模式
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合
策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性的功能的对象的抽象集合才算是类。
抽象策略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设计模式--策略模式相关推荐
- Java设计模式-策略模式作业
Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...
- java设计模式---策略模式
1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象 ...
- JAVA设计模式-策略模式
1.1 需求背景 Background:M公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下: (1)学生凭学生证可享受票价8折优惠: (2 ...
- 小故事说JAVA设计模式-策略模式【Strategy Pattern】
# 弄清概念 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式 ...
- Java设计模式-策略模式(Strategy)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...
- Java设计模式——策略模式(解决满屏的if/else)
一.业务场景 项目需要对接支付系统,根据不同客户类型会有不同的支付方式,比如:支付宝.微信.银联.云闪付等等其他第三方支付平台,这个时候策略模式就大展身手了. 传统的if/else/switch 等等 ...
- Java设计模式----策略模式(Strategy)
1. 策略模式: 策略模式,也称为政策模式,定义如下: 定义一组算法,将每个算法都封装起来,使他们可以相互转化 2. 策略模式的原理是面向对象的继承和多态.策略模式的3个角色 a. Strateg ...
- Java设计模式策略模式(附实例代码)每天一学设计模式
1.策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换.策略模式让算法可以独立于使用它的客户而变化. (1)Context(环境类):环境类是使用 ...
- Java设计模式-策略模式(一)
一.策略模式是什么? 策略模式是指有一定行动内容的相对稳定的策略名称.策略模式在古代中又称"计策",简称"计",如<汉书·高帝纪上>:"汉 ...
最新文章
- python restful django_如何使用Django / Python从RESTful Web服务中使用XML?
- onvif 客户端 linux,Linux下onvif客户端关于ipc摄像头的搜索
- step1 . day1:工具准备
- mysql path conflict_yum安装MySQL出现conflict problem
- eclipse关闭讨厌的菜单
- Linux中find用法整理
- 安卓系统怎么安装软件_「软件」怎么在虚拟机里安装系统
- 深度学习3-tensorflow2.0模型训练-自定义模型训练
- Guava学习笔记(五):简化异常处理的Throwables类
- 转载--卷积神经网络卷积层池化层输出计算公式
- win10PE安装到硬盘
- python二叉树的非递归遍历
- 选择中医 - 虚寒性体质的人吃什么好(萝卜、生姜、地瓜、大蒜)
- 三星s窗口共享android,使用 S 窗口共享轻松让您的三星手机连接电脑
- Winmail + Foxmail搭建企业内部邮件系统
- php 判断某一天是周几,php如何判断一个日期是周几
- 财务分析之资产负债表
- SDN和NFV的关系?
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
- 基于SC-LIO-SAM的SLAM实践
热门文章
- vs2010新功能(转)
- 友盟登陆传值+OkHttp+recyclerview展示瀑布流+跳转Intent传值+属性动画
- 软件测试—软件测试基础知识—(五)软件测试模型
- 新建虚拟机后打开虚拟机前的设置,防止ip变动
- python自动补全_Windows 下python的tab自动补全
- 前端开发,必知ES5、ES6的7种继承
- Web前端程序员该如何准备面试?这些面试知识应该掌握
- android switch控件的大小,关于Android Action Bar 上的 Switch控件
- java int 指针_如何在Java中使用指针?
- 杨云 中科院计算机所,专家人才库数据----中国科学院计算技术研究所