现在的位置: 首页 > 综合 > 正文

策略模式DEMO

2017年12月26日 ⁄ 综合 ⁄ 共 2477字 ⁄ 字号 评论关闭

策略模式的组成

---抽象策略角色:策略类,通常由一个接口或者抽象类实现

---具体策略角色:包装了相关的算法和行为

---环境角色:持有一个策略类的引用,最终给客户端调用的。

抽象策略角色:

Sort.java

package com.wansha3;

import java.util.List;

public interface Sort {
	public void sort(List<Student> list);
}

具体策略角色:

SortByNameASC.java

package com.wansha3;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 
 * @author sharp
 * 按名字升序排序。若名字相同则按ID的升序进行排序
 *
 */
public class SortByNameASC implements Sort,Comparator<Student>{
	@Override
	public void sort(List<Student> list) {
		Collections.sort(list, this);
	}
	@Override
	public int compare(Student o1, Student o2) {
		int result = o1.getName().compareTo(o2.getName());
		return result==0? o1.getId()-o1.getId():result ;
	}
}

SortByNameDESC.java

package com.wansha3;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 
 * @author sharp
 * 按名字降序排序。若名字相同则按ID的升序进行排序
 *
 */
public class SortByNameDESC implements Sort,Comparator<Student>{
	@Override
	public void sort(List<Student> list) {
		Collections.sort(list, this);
	}
	@Override
	public int compare(Student o1, Student o2) {
		int result = o2.getName().compareTo(o1.getName());
		return result==0? o1.getId()-o1.getId():result ;
	}
}

SortByIdASC.java

package com.wansha3;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 
 * @author sharp
 * 按ID升序排序。
 *
 */
public class SortByIdASC implements Comparator<Student>, Sort {
	@Override
	public void sort(List<Student> list) {
		Collections.sort(list, this);
	}
	@Override
	public int compare(Student o1, Student o2) {
		return o1.getId()-o2.getId() ;
	}
}


SortByIdDESC.java


package com.wansha3;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 
 * @author sharp
 * 按ID降序排序。
 *
 */
public class SortByIdDESC implements Comparator<Student>, Sort {
	@Override
	public void sort(List<Student> list) {
		Collections.sort(list, this);
	}
	@Override
	public int compare(Student o1, Student o2) {
		return o2.getId()-o1.getId() ;
	}
}

环境角色:

Environment.java

package com.wansha3;

import java.util.List;

public class Environment {
	private Sort sorter = new SortByIdASC();//默认按ID正序排序
	
	public void setSort(Sort sort) {
		this.sorter = sort;
	}
	
	public void sort(List list ){
		this.sorter.sort(list);
	}
}

客户端

client.java

package com.wansha3;

import java.util.LinkedList;

public class Client {
	/**
	 * @author sharp
	 */
	public static void main(String[] args) {
		LinkedList<Student> list = new LinkedList<Student>();
		Student st1 = new Student(1,"blid",25);
		Student st2 = new Student(2,"lisi",35);
		Student st3 = new Student(3,"lisi",85);
		Student st4 = new Student(4,"cangwu",15);
		list.add(st1);
		list.add(st2);
		list.add(st3);
		list.add(st4);
		Environment env = new Environment();
		env.setSort(new SortByNameASC());       //设置排序规则
		env.sort(list);
		System.out.println(list);
	}

}

抱歉!评论已关闭.