• 策略模式和自定义排序规则


    一、定义Person类模型

    package cn.lesson8.statary;
    
    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;
    	}
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    	}
    	
    	
    }
    

    二、定义接口SortInterface

    package cn.lesson8.statary;
    
    import java.util.List;
    
    public interface SortInterface {
    	public void sort(List<Person> list);
    }
    

    三、实现接口的具体方法UpNameSort

    该方法继承了Comparator接口,实现自定义排序规则。
    package cn.lesson8.statary;
    
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class UpNameSort implements SortInterface,Comparator<Person>{
    
    	@Override
    	public int compare(Person o1, Person o2) {
    		int result=o1.getName().compareTo(o2.getName());
    		if(0==result){
    			return o1.getId()-o2.getId();	//如果名字相等,按Id排序
    		}
    		return result;
    	}
    
    	@Override
    	public void sort(List<Person> list) {
    		Collections.sort(list, this); //安装自定义排序规则进行排序,this代表当前的排序规则
    	}
    	
    }
    


    四、调用环境类Environment

    package cn.lesson8.statary;
    
    import java.util.List;
    
    public class Environment {
    	private SortInterface sortInterface;
    	
    	public Environment(SortInterface sortInterface){
    		this.sortInterface=sortInterface;
    	}
    	
    	public Environment(){
    		
    	}
    
    	public void setSortInterface(SortInterface sortInterface) {
    		this.sortInterface = sortInterface;
    	}
    	
    	public void sort(List<Person> list){
    		this.sortInterface.sort(list); //this代表当前对象调用sortInterface对象的sort()方法
    	}
    }
    

    五、测试类Client

    package cn.lesson8.statary;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Client {
    	public static void main(String[] args){
    		Person p1 = new Person();
    		p1.setName("Tom");
    		p1.setId(1);
    		p1.setAge(20);
    
    		Person p2 = new Person();
    		p2.setName("Tonny");
    		p2.setId(2);
    		p2.setAge(50);
    
    		Person p3 = new Person();
    		p3.setName("Tom");
    		p3.setId(5);
    		p3.setAge(30);
    
    		Person p4 = new Person();
    		p4.setName("ABC");
    		p4.setId(8);
    		p4.setAge(10);
    
    		Person p5 = new Person();
    		p5.setName("Xyz");
    		p5.setId(9);
    		p5.setAge(15);
    		
    		List<Person> list = new ArrayList<Person>();
    		list.add(p1);
    		list.add(p2);
    		list.add(p3);
    		list.add(p4);
    		list.add(p5);
    		
    		Environment env=new Environment();
    		UpNameSort uns=new UpNameSort();
    		env.setSortInterface(uns);
    		env.sort(list);
    		
    		for(int i=0;i<list.size();i++){
    			Person p=list.get(i);
    			System.out.println(p.toString());
    		}
    	}
    }
    





  • 相关阅读:
    SOLR企业搜索平台 一 (搭建SOLR)
    org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解决方案
    SOLR企业搜索平台 二 (分词安装)
    SOLR企业搜索平台 三 (schema.xml配置和solrj的使用)
    java读取某个文件夹下的所有文件
    Asp.net中奇怪的Calendar日期
    [持续交付实践] 交付流水线设计:代码静态检查
    [持续交付实践] pipeline使用:语法详解
    [持续交付实践] pipeline使用:快速入门
    [持续交付实践] 开篇:持续集成&持续交付综述
  • 原文地址:https://www.cnblogs.com/james1207/p/3266559.html
Copyright © 2020-2023  润新知