java设计模式学习笔记2 策略模式
来源:互联网 发布:专业手机维修软件 编辑:程序博客网 时间:2024/06/01 09:08
策略模式也是java中用的比较多的一种编程模式,如TreeMap和TreeSet中的比较器,就是使用的策略模式。
策略模式把变化的概念进行了封装,编程的时候提供接口,而不管具体实现。
一般有3个角色1)抽象策略角色(通常由一个接口或者抽象类组成)
2)具体策略角色:implements抽象策略角色,包装相关算法和具体行为
3)环境角色:就像TreeSet(比较器)与TreeMap(比较器),给策略角色提供了使用环境,持有一个抽象策略角色的引用
编写策略模式,也可以参照上面的顺序。
下面是安装网上教程学习时候编写的一个应用策略模式的一个小demo。用于按照名字顺序给List中的元素进行排序,如果名字一样则按照id排序。
1)先定义一个抽象策略角色Sort,用接口实现其中使用的person类见末尾
package com.charleszhu.test;import java.util.List;public interface Sort {public void sort(List<Person> list);}
2 )编写以空格具体策略角色,实现这个抽象策略模式接口,同时实现比较器接口
package com.charleszhu.test;import java.util.Collections;import java.util.Comparator;import java.util.List;public class UpByName implements Sort, Comparator<Person> {public void sort(List<Person> list) {// TODO Auto-generated method stubCollections.sort(list, this);}public int compare(Person o1, Person o2) {int result = o1.getName().compareTo(o2.getName());if(0==result){return o1.getId()-o2.getId();}return result;}}
3)编写一个环境类environment,包含一个抽象策略模式Sort的引用:
package com.charleszhu.test;import java.util.List;public class Evrionment {public static void listSort(List<Person> list,Sort s){s.sort(list);}}4) 编写一个测试用例Client
public class Client {public static void main(String[] args) {Person p1 = new Person(1,"charles1",22);Person p2 = new Person(2,"charles5",22);Person p3 = new Person(4,"charles5",22);Person p4 = new Person(3,"charles3",22);Person p5 = new Person(5,"charles2",22);List<Person> list = new ArrayList<Person>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);list.add(p5);Evrionment.listSort(list, new UpByName());for (Iterator<Person> iterator = list.iterator(); iterator.hasNext();) {Person p= iterator.next();System.out.println(p.getId()+" "+p.getName());} }}
输出结果如下:
1 charles1
5 charles2
3 charles3
2 charles5
4 charles5
此处使用的Collections包含了许多和集合相关的静态方法可以直接调用。与Arrays类似,但后者都是关于数组的相关静态方法。
其中使用了一个自定义的类Personpackage com.charleszhu.test;public class Person {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public Person() {}}
0 0
- java设计模式学习笔记2 策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java 设计模式 学习笔记(4) 策略模式
- java/android 设计模式学习笔记(17)---策略模式
- java设计模式学习笔记之策略模式
- 学习笔记——JAVA设计模式<18>策略模式
- 策略设计模式--学习笔记
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记:策略模式
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记七:策略模式
- 设计模式学习笔记--策略模式
- 设计模式学习笔记-策略模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记(一):策略模式
- 编译器错误 C2662
- 代码库开源项目推荐(1.3)
- Linux下设置Oracle开机自启动
- adnroid 短信 发送
- Qt中QTableWidget用法总结
- java设计模式学习笔记2 策略模式
- ios学习之App States
- 开源项目推荐(12.25):菜单(Menu)
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- FILETIME的使用
- js报对象不支持此属性
- cocos2d-x3.0 + vs2012环境配置【codingnow.cn】
- cocos2dx开发要注意的问题
- maven常用命令