`
zhengjiong
  • 浏览: 69115 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用策略模式让集合自定义排序

    博客分类:
  • Java
阅读更多

 

package com.zj.exercise2;

import java.util.List;

/**
 * 功能:抽象策略角色
 * @author zhengjiong
 * time:2011-9-16 00:02:12
 */
public interface Strategy
{
	public void sort(List<Person> list);
	
}

 

 

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 功能:定义一个具体的策略角色(Strategy),也是一个比较器(Comparator),按username的升序排列
 * @author zhengjiong
 * time:2011-9-16 上午12:02:56
 */
public class StrategyByUsername	implements Strategy, Comparator
{

	@Override
	public void sort(List<Person> list)
	{
		Collections.sort(list, this);
	}

	/**
	 * 按照username的升序排列,如果username一样则按照id的升序排列
	 */
	@Override
	public int compare(Object o1, Object o2)
	{
		Person p1 = (Person)o1;
		Person p2 = (Person)o2;
		
		//如果姓名一样则按照id升序排列
		if(p1.getUsername().equals(p2.getUsername()))
		{
			return p1.getId() - p2.getId();
		}
		//按照username升序排列
		return p1.getUsername().compareTo(p2.getUsername());
	}
}

 

import java.util.List;

/**
 * 功能:策略模式的环境角色
 * @author zhengjiong
 * time:2011-9-16 上午01:08:40
 */
public class Environment
{
	private Strategy strategy;
	
	public Environment(Strategy strategy)
	{
		this.strategy = strategy;
	}
	
	public void sort(List list)
	{
		strategy.sort(list);
	}
	
	public void setStrategy(Strategy strategy)
	{
		this.strategy = strategy;
	}

	public Strategy getStrategy()
	{
		return strategy;
	}
}

 package com.zj.exercise2;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * 功能:使用策略模式让集合排序
 * @author zhengjiong
 * time:2011-9-16 上午01:10:49
 */
public class Client
{
	public static void main(String[] args)
	{	
		Person p1 = new Person(1, "e", 16);
		Person p2 = new Person(5, "a", 15);
		Person p3 = new Person(4, "c", 20);
		Person p4 = new Person(2, "b", 23);
		Person p5 = new Person(3, "f", 18);
		Person p6 = new Person(6, "a", 18);
		Person p7 = new Person(8, "y", 20);
		Person p8 = new Person(7, "x", 16);
		Person p9 = new Person(9, "b", 25);
		Person p10 = new Person(10, "h", 19);
		
		
		List<Person> list = new LinkedList<Person>();
		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p5);
		list.add(p6);
		list.add(p7);
		list.add(p8);
		list.add(p9);
		list.add(p10);
		
		for(Iterator i = list.iterator(); i.hasNext();)
		{
			Person person = (Person)i.next();
			System.out.println(person);
		}
		System.out.println();
		System.out.println("------------id升序------------");
		
		//实例化具体的策略模式
		StrategyById sbi = new StrategyById();
		
		//实例化环境角色,使用id升序排列
		Environment env = new Environment(sbi);
		
		env.sort(list);
		
		for(Iterator i = list.iterator(); i.hasNext();)
		{
			Person person = (Person)i.next();
			System.out.println(person);
		}
		
		System.out.println();
		System.out.println("------------id降序------------");
		//实例化具体的策略模式
		StrategyByIdDESC sbidesc = new StrategyByIdDESC();
		//设置为降序模式
		env.setStrategy(sbidesc);
		env.sort(list);
		for(Iterator i = list.iterator(); i.hasNext();)
		{
			Person person = (Person)i.next();
			System.out.println(person);
		}
		
		System.out.println();
		System.out.println("------------username升序,如果名字一样按照id升序排列------------");
		//实例化具体的策略模式
		StrategyByUsername sbu = new StrategyByUsername();
		//设置为降序模式
		env.setStrategy(sbu);
		env.sort(list);
		for(Iterator i = list.iterator(); i.hasNext();)
		{
			Person person = (Person)i.next();
			System.out.println(person);
		}
		
		System.out.println();
		System.out.println("------------username降序,如果名字一样按照id升序排列------------");
		//实例化具体的策略模式
		StratigyByUsernameDESC sbdesc = new StratigyByUsernameDESC();
		//设置为降序模式
		env.setStrategy(sbdesc);
		env.sort(list);
		for(Iterator i = list.iterator(); i.hasNext();)
		{
			Person person = (Person)i.next();
			System.out.println(person);
		}
		
	}
}
 
分享到:
评论

相关推荐

    ASP.net技术内幕

    17.3 使用页面数据缓存 17.3.1 在缓存中添加条目 17.3.2 添加缓存文件依赖性 17.3.3 添加缓存触发器依赖性 17.3.4 添加缓存键依赖性 17.3.5 建立绝对的过期策略 17.3.6 建立变化...

    asp.net技术内幕(1)

    12.5 小结 &lt;br&gt;第13章 操作XML &lt;br&gt;13.1 XML类概述 13.2 通过DataSet使用XML 13.2.1 将XML文档读入DataSet 13.2.2 通过ReadXml使用模式 13.2.3 从DataSet写XML文档 13.2.4 通过...

    asp.net技术内幕(2)

    12.5 小结 &lt;br&gt;第13章 操作XML &lt;br&gt;13.1 XML类概述 13.2 通过DataSet使用XML 13.2.1 将XML文档读入DataSet 13.2.2 通过ReadXml使用模式 13.2.3 从DataSet写XML文档 13.2.4 通过...

    asp.net技术内幕(5)

    12.5 小结 &lt;br&gt;第13章 操作XML &lt;br&gt;13.1 XML类概述 13.2 通过DataSet使用XML 13.2.1 将XML文档读入DataSet 13.2.2 通过ReadXml使用模式 13.2.3 从DataSet写XML文档 13.2.4 通过...

    asp.net技术内幕(4)

    12.5 小结 &lt;br&gt;第13章 操作XML &lt;br&gt;13.1 XML类概述 13.2 通过DataSet使用XML 13.2.1 将XML文档读入DataSet 13.2.2 通过ReadXml使用模式 13.2.3 从DataSet写XML文档 13.2.4 通过...

    asp.net技术内幕(3)

    12.5 小结 &lt;br&gt;第13章 操作XML &lt;br&gt;13.1 XML类概述 13.2 通过DataSet使用XML 13.2.1 将XML文档读入DataSet 13.2.2 通过ReadXml使用模式 13.2.3 从DataSet写XML文档 13.2.4 通过...

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    RoutingStrategyDemo 演示如何使用路由策略。 SharedDP 共享依赖属性示例。 StackPanelLoadedDemo WPF中元素的生命周期事件演示。 UnderstandingDP 理解依赖属性。 UnderstandRoutedEvent 理解...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例117 策略模式的简单应用 148 实例118 适配器模式的简单应用 149 实例119 普通内部类的简单应用 151 实例120 局部内部类的简单应用 152 实例121 匿名内部类的简单应用 153 实例122 静态内部类的简单应用 154 第2...

    flex3的cookbook书籍完整版dpf(包含目录)

    使用代码隐藏模式分离MXML和ActionScript 1.13节.组件属性绑定 1.14节.使用自定义事件以及事件数据传递 1.15节.监听键盘事件 1.16节.定义方法参数 1.17节.检测对象数据类型 1.18节.接口的定义和实现 第二章. 控件与...

    springMongodb参考文档中文版

    使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的...

    Hibernate+中文文档

    11.5. 连接释放模式(Connection Release Modes) 12. 拦截器与事件(Interceptors and events) 12.1. 拦截器(Interceptors) 12.2. 事件系统(Event system) 12.3. Hibernate的声明式安全机制 13. 批量处理(Batch ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    11.5. 连接释放模式(Connection Release Modes) 12. 拦截器与事件(Interceptors and events) 12.1. 拦截器(Interceptors) 12.2. 事件系统(Event system) 12.3. Hibernate的声明式安全机制 13. 批量处理(Batch ...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    8.6.1 使用透视转换的自定义聚合 8.6.2 用户定义聚合函数(UDA,User Defined Aggregate) 8.6.3 专用解决方案 8.7 直方图(Histogram) 8.8 分组因子 8.9 分组集 8.9.1 样例数据 8.9.2 GROUPING SETS从属...

Global site tag (gtag.js) - Google Analytics