设计模式-策略模式(Strategy Model)
1、概述
2、目的
3、适用场景
4、结构与组成

4、实现
package com.cnblogs.vicentzh.strategymodel; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class StrategyModel { /** * @Describe 客户端程序 * @param args */ public static void main(String[] args) { Student p1 = new Student("Tom",1,20); Student p2 = new Student("Tonny",2,50); Student p3 = new Student("Tom",5,30); Student p4 = new Student("John",8,10); Student p5 = new Student("Susan",9,15); List<Student> students = new ArrayList<Student>(); students.add(p1); students.add(p2); students.add(p3); students.add(p4); students.add(p5); Context env = new Context(); //正序排列 UpNameSort uns = new UpNameSort(); env.setSortStrategy(uns); env.sort(students); for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { Student student = iter.next(); System.out.println("id: " + student.getId() + ", name: " + student.getName() + ", age:" + student.getAge()); } System.out.println("-----------------------"); //倒序排列 DownNameSort dns = new DownNameSort(); env.setSortStrategy(dns); env.sort(students); for (Iterator<Student> iter=students.iterator(); iter.hasNext();) { Student student = iter.next(); System.out.println("id: " + student.getId() + ", name: " + student.getName() + ", age:" + student.getAge()); } } } //需要用到的具体实例类 class Student { private String name; private int age; private int id; public Student(String name, int age, int id) { this.name = name; this.age = age; this.id = id; } public String getName() { return name; } public int getAge() { return age; } public int getId() { return id; } } //抽象策略类(Strategy),即策略接口 interface SortStrategy { public void sortStudent(List<Student> students); } //具体策略类(ConcreteStrategy),即具体正序算法实现类 class UpNameSort implements SortStrategy,Comparator<Student> { @Override public void sortStudent(List<Student> students) { Collections.sort(students, this); } @Override public int compare(Student o1, Student o2) { int result = o1.getName().compareTo(o2.getName()); if(0==result) { return o1.getId() - o2.getId(); } return result; } } //具体策略类(ConcreteStrategy),即具体倒序算法实现类 class DownNameSort implements SortStrategy, Comparator<Student> { @Override public void sortStudent(List<Student> students) { Collections.sort(students, this); } @Override public int compare(Student o1, Student o2) { int result = o2.getName().compareTo(o1.getName()); if(0==result) { return o1.getId() - o2.getId(); } return result; } } //使用环境类(Context) //环境类根据接收到客户端具体的策略来对对象进行使用,同样也能用setSortStrategy方法 //随时根据客户端的需求去改变策略算法,并且不影响对象。 class Context { private SortStrategy concreteStrategy; //使用策略配置环境类 public Context(SortStrategy conSortStrategy) { this.concreteStrategy = conSortStrategy; } public Context() { } //可随意定制化具体策略 public void setSortStrategy(SortStrategy conSortStrategy) { this.concreteStrategy = conSortStrategy; } //使用具体的策略(concreteStrategy)对对象进行操作 public void sort(List<Student> students) { concreteStrategy.sortStudent(students); } }
5、优缺点
6、总结分析
作者:vincentzh
出处:http://www.cnblogs.com/vincentzh/
本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!
设计模式-策略模式(Strategy Model)的更多相关文章
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- 设计模式——策略模式(Strategy Pattern)
写在前面: 直接将书中的例子用来作为记录自己学习的成果,不知道这样好不好,如果给原作者带来什么不利的影响不妨告知一声,我及时删掉. UML图: 抽象策略:Strategy package com.cn ...
- 说说设计模式~策略模式(Strategy)
返回目录 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.而对于客户端(UI)来说,可以通过IOC再配合工厂模块,实现动态策略的切换,策略模块通常于一个抽象策略对象(in ...
- C#设计模式——策略模式(Strategy Pattern)
一.概述我们来实现一个企业的工资系统,该企业中不同级别的员工工资算法都不相同,针对该问题,最容易想到的莫过于在代码中堆积一大堆if…else…语句或者是switch…case…语句.如果该企业中不同级 ...
- 设计模式-策略模式Strategy以及消灭if else
概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...
- 设计模式---策略模式Strategy(对象行为型)
1. 概述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不 ...
- 大话设计模式--策略模式 strategy -- C++实现实例
1. 策略模式: 它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户. 用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合. 实例中策 ...
随机推荐
- required
required,这是HTML5中的一个新属性:这是HTML5中input元素中的一个属性. required译为必须的,在input元素中应用这一属性,就表示这一input元素节点是必填的或者必选的 ...
- 中国CIO最关心的八大问题(上)
中国CIO最关心的八大问题(上) 近期,ITValue和ValueResearch联合展开<IT决策者投资与生存状态大调查>,调查范围从关注CIO本身,延展至关注CIO所供职企业--其赖以 ...
- PostGIS(解压版)安装
1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/windows/ post ...
- Ubuntu 16.04 安装 arm-linux-gcc 嵌入式交叉编译环境 问题汇总
闲扯: 实习了将近半年一直在做硬件以及底层的驱动,最近要找工作了发现了对linux普遍要求很高,而且工作岗位也非常多,所以最近一些时间在时不时地接触linux. 正文:(我一时兴起开始写博客,准备不充 ...
- 清除打印机队列中无法清除的任务 & 清空打印池
故障现象典型表现为以下两种情况 1.当打印任务开始进行时,这些打印任务便被保存在打印作业列表(也称打印队列)内.如果打印机因意外暂停(如打印机未连接)而未完成打印任务,则该打印任务将列入打印队列,并且 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- sublime text 3 + python配置,完整搭建及常用插件安装
四年的时间,一直使用EmEditor编辑器进行Python开发,之前是做面向过程,只需要将一个单独的py文件维护好即可,用着也挺顺手,但是最近在做面向对象的开发,不同的py文件中相互关联较多,感觉单纯 ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
- NodeJs 开发微信公众号(五)真实环境部署
在测试环境下开发完成代表着你离正式上线的目标不远了.接下来本章就主要谈一谈把测试环境的公众号升级为正式的公众号. 服务器和域名 目前为止我们只是在自己的电脑上完成了测试环境.真实的线上环境当然需要自己 ...
- ABP源码分析四十三:ZERO的本地化
ABP Zero模块扩展了ABP基础框架中的本地化功能,实现了通过数据库管理本地化的功能.其通过数据库保存本地化语言及其资源. ApplicationLanguage:代表本地化语言的实体类.一种语言 ...