- 浏览: 324397 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
下面讲解策略模式:
策略模式(Strategy Pattern)中体现了两个非常基本的面向面向对象涉及的原则:
--封装变化的概念
--编程中使用接口,而不是对接口的实现
策略模式的定义:
--定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
--策略模式使这些算法在客户端调用它们的时候能够互不影响地变化
策略模式的组成:
--抽象策略角色:策略类,通常由一个接口或者抽象类实现(例如Comporator接口)
--具体策略角色:包装了相关的算法和行为(例如Comporator接口的实现类)
--环境角色:持有策略类的引用,最终给客户端调用的(例如TreeSet或TreeMap,构造方法中接收了Comporator实现类的对象的一个引用)
策略模式的实现:
--策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口独立的类中,从而使得它们可以互相替换。
--策略模式使得算可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
--环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。
策略模式的编写步骤:
1、对策略对象定义一个公共接口。
2、编写策略类,该类实现了上面的公共接口
3、在使用策略对象的类中保存一个对策略对象的引用。
4、在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值。
策略模式的缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2、造成很多的策略类。
解决上述问题的方法是:采用工厂方法(这个现在还不讲)
以下是示例代码:
最后留的一个用策略模式实现的作业(此作业进行了详细讲解,同时自己也做出来了,经常回忆性的看看):
1. 有这样一个类:
public class Person {
private int id;
private String name;
private int age;
}
// getter and setter
要求:假如有若干个类Person对象存在一个List当中,对他们进行排序,分别按照名字、
年龄、id 进行排序(要有正序与倒序两种排序方式)。假如年龄或者姓名重复,按照id
的正序进行排序。要求使用策略模式进行。
作业答案见附件
策略模式(Strategy Pattern)中体现了两个非常基本的面向面向对象涉及的原则:
--封装变化的概念
--编程中使用接口,而不是对接口的实现
策略模式的定义:
--定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
--策略模式使这些算法在客户端调用它们的时候能够互不影响地变化
策略模式的组成:
--抽象策略角色:策略类,通常由一个接口或者抽象类实现(例如Comporator接口)
--具体策略角色:包装了相关的算法和行为(例如Comporator接口的实现类)
--环境角色:持有策略类的引用,最终给客户端调用的(例如TreeSet或TreeMap,构造方法中接收了Comporator实现类的对象的一个引用)
策略模式的实现:
--策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口独立的类中,从而使得它们可以互相替换。
--策略模式使得算可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
--环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。
策略模式的编写步骤:
1、对策略对象定义一个公共接口。
2、编写策略类,该类实现了上面的公共接口
3、在使用策略对象的类中保存一个对策略对象的引用。
4、在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值。
策略模式的缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2、造成很多的策略类。
解决上述问题的方法是:采用工厂方法(这个现在还不讲)
以下是示例代码:
package com.shengshiyuan; /** * 抽象策略角色 * 类: Strategy <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:30:24 AM */ public interface Strategy { /** * 完成两个整型数字的运算(加、减、乘、除) * 方法: calculate <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:30:35 AM * @param a * @param b * @return */ public int calculate(int a, int b); }
package com.shengshiyuan; /** * 具体策略角色 * 类: AddStrategy <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:32:11 AM */ public class AddStrategy implements Strategy { /** * 完成假发操作 * 方法: calculate <br> * 描述: TODO * @param a * @param b * @return * @see com.shengshiyuan.Strategy#calculate(int, int) */ public int calculate(int a, int b) { return a + b; } }
package com.shengshiyuan; /** * 具体策略角色 * 类: SubtractStrategy <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:33:30 AM */ public class SubtractStrategy implements Strategy { /** * 完成减法操作 * 方法: calculate <br> * 描述: TODO * @param a * @param b * @return * @see com.shengshiyuan.Strategy#calculate(int, int) */ public int calculate(int a, int b) { return a - b; } }
package com.shengshiyuan; /** * 具体策略类 * 类: MultiplyStrategy <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:34:55 AM */ public class MultiplyStrategy implements Strategy { /** * 完成乘法操作 * 方法: calculate <br> * 描述: TODO * @param a * @param b * @return * @see com.shengshiyuan.Strategy#calculate(int, int) */ public int calculate(int a, int b) { return a * b; } }
package com.shengshiyuan; /** * 具体策略角色 * 类: DivideStrategy <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:35:41 AM */ public class DivideStrategy implements Strategy { /** * 完成除法操作 * 方法: calculate <br> * 描述: TODO * @param a * @param b * @return * @see com.shengshiyuan.Strategy#calculate(int, int) */ public int calculate(int a, int b) { return a / b; } }
package com.shengshiyuan; /** * 环境角色 * 类: Environment <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:37:24 AM */ public class Environment { private Strategy strategy; /** * 在构造方法中初始化策略类的引用 * 标题: 构造器 <br> * 描述: TODO <br> * 作者: fangguanhong fangguanhong@163.com <br> * 时间: Oct 17, 2013 11:49:35 AM * @param strategy */ public Environment(Strategy strategy) { this.strategy = strategy; } public int calculate(int a, int b) { return strategy.calculate(a, b); } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public Strategy getStrategy() { return this.strategy; } }
package com.shengshiyuan; public class Client { public static void main(String[] args) { AddStrategy addStrategy = new AddStrategy(); // 加 Environment environment = new Environment(addStrategy); System.out.println(environment.calculate(3, 4)); // 减 SubtractStrategy subtractStrategy = new SubtractStrategy(); environment.setStrategy(subtractStrategy); System.out.println(environment.calculate(3, 4)); // 乘 MultiplyStrategy multiplyStrategy = new MultiplyStrategy(); environment.setStrategy(multiplyStrategy); System.out.println(environment.calculate(3, 4)); // 除 DivideStrategy divideStrategy = new DivideStrategy(); environment.setStrategy(divideStrategy); System.out.println(environment.calculate(3, 4)); } }
最后留的一个用策略模式实现的作业(此作业进行了详细讲解,同时自己也做出来了,经常回忆性的看看):
1. 有这样一个类:
public class Person {
private int id;
private String name;
private int age;
}
// getter and setter
要求:假如有若干个类Person对象存在一个List当中,对他们进行排序,分别按照名字、
年龄、id 进行排序(要有正序与倒序两种排序方式)。假如年龄或者姓名重复,按照id
的正序进行排序。要求使用策略模式进行。
作业答案见附件
- Strategy.zip (13.3 KB)
- 下载次数: 2
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 620Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1642我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1447String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1184今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 458讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 973emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 445BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5811、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2981http://donald-draper.iteye.com/ ... -
用@ExceptionHandler 来进行切面异常处理
2017-08-29 11:47 2311有时候我们想处理某个类里Controller中抛出的异常怎么搞 ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 1017spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 709java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 522诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 512http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 476Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 407要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 490spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1082需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 880按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 489112345
相关推荐
策略模式设计模式之策略模式详解。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一个策略接口,该接口定义了一组相关操作,然后创建一系列实现了该接口的具体策略类。这些策略类分别代表不同的算法或...
Android编程设计模式之策略模式详解 Android编程设计模式中,策略模式是一种常用的设计模式,它解决了系统中多种算法或策略的选择问题。在Android开发中,策略模式可以应用于多种场景,例如排序算法、支付方式选择...
SpringBoot结合策略模式实战套路 策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,...
主要介绍了深入理解JavaScript系列(33):设计模式之策略模式详解,策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户,需要的朋友可以参考下
Java 策略模式详解 策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口...
### C#设计模式之策略模式详解 在软件工程与编程领域,设计模式被视为解决常见问题的模板或指导原则,能够帮助开发者以一种可复用的方式解决问题。其中,“策略模式”是一种行为型设计模式,它允许在运行时选择算法...
### 策略模式详解 策略模式是一种行为设计模式,它使你能在运行时选择算法或策略。在文件存储场景下,我们可以定义一个抽象的`FileStorageStrategy`接口,里面包含`store`、`retrieve`等方法。然后,我们创建两个...
Java设计模式中的策略模式是一种行为设计模式,它允许在运行时选择算法或策略,从而提供了更大的灵活性。策略模式的核心在于将算法封装到独立的可互换的策略类中,使得算法的变化不会影响到使用算法的客户端代码。 ...
javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解
策略模式 一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。 简单来说,只要你写过程序就用过策略模式,不要说没用过,难道if-else(switch)没用过吗….. if-else在其实就是一个策略模式的体现,根据...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在JavaScript中,策略模式的应用可以帮助我们更好地组织代码,提高代码的可扩展性和可维护性。以下是对策略模式的详细解析: 首先,策略模式的核心...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式允许我们定义一组算法或策略,并将每个策略封装为一个类,使得它们可以互换,而不会影响到客户端代码。这种模式的核心在于"策略",...