策略模式小练习
2015-07-30 10:13
302 查看
练习:
假如有若干个person对象保存在list对象之中,对它们分别用id,姓名,年龄进行排序(正序/倒序),如果年龄或者姓名重复,则按照id的升序进行排序。要求使用策略模式进行。
Person对象
1、抽象策略类
2、具体实现类(按id倒序排,其它略)
3、环境类
4、客户端
假如有若干个person对象保存在list对象之中,对它们分别用id,姓名,年龄进行排序(正序/倒序),如果年龄或者姓名重复,则按照id的升序进行排序。要求使用策略模式进行。
Person对象
public class Person { private int id; private String name; private int age; public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = 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; } }
1、抽象策略类
public interface Strategy { public void sort(List<Person> list); }
2、具体实现类(按id倒序排,其它略)
public class IdDescStrategy implements Strategy, Comparator<Person> { @Override public void sort(List<Person> list) { Collections.sort(list, this); } @Override public int compare(Person p1, Person p2) { return p2.getId() - p1.getId(); } }
3、环境类
public class Environment { private Strategy strategy ; public Environment(Strategy strategy) { this.strategy = strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void sort(List<Person> list) { this.strategy.sort(list); } }
4、客户端
public static void main(String[] args) { IdDescStrategy iddesc = new IdDescStrategy(); Environment environment = new Environment(iddesc); List<Person> list = new ArrayList<Person>(); Person p1 = new Person(1, "wangxiaoxiao", 10); Person p2 = new Person(2, "zhangshan", 20); Person p3 = new Person(3, "lisi", 30); Person p4 = new Person(4, "wangwu", 40); Person p5 = new Person(5, "wangke", 50); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); environment.sort(list); for(Person p : list){ System.out.println(p.getId()+", "+p.getName()+", "+p.getAge()); } }
相关文章推荐
- datagrid 动态生成列
- Oracle_SQL_序列与groupby同时用
- Jeecms投票不准解决方案
- Jeecms投票不准解决方案
- 修改文件上传默认样式
- 求两个字符串去掉重复字母后所包含字符
- Jeecms之new标签实现
- itext生成只读pdf文档
- Jeecms之编辑器表格对齐及图片插入
- Jeecms之JSP访问action类
- javascript取当月最后一天
- 一个卫语句
- itext生成重复水印(watermark)
- itext生成重复水印(watermark)
- 中文编码测试
- 中文编码测试
- 设计模式_代理模式_由浅入深
- Jeecms之JSP访问action类
- Jeecms投票不准解决方案
- 读书笔记MoreEffectiveC++(30)