import java.util.Arrays;

public class ClientStrategy {
    public static void main(String[] args) {
        User user1 = new User("小王",12,153.4);
        User user2 = new User("小李",14,163.4);
        User user3 = new User("小明",13,123.4);
        User user4 = new User("小杨",4,6.4);
        User[] users = {user1,user2,user3,user4};
        //依据年龄啊比较

        UserSorter userSorter = new UserSorter();
        userSorter.sort(users,new CompareHeightStrategy());



        //打印数组
        System.out.println(Arrays.toString(users));
    }
}

//策略设计模式:比较不同的对象
//依赖于不同的比较策略;


public class User  {


    public User() {
    }

    public User(String username, Integer age, Double height) {
        this.username = username;
        this.age = age;
        this.height = height;
    }

    private String username;
    private Integer age;
    private Double height;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }
//
//    @Override
//    public Integer compare(Comparable comparable) {
//        if (comparable instanceof User){
//            User user = (User) comparable;
//            return this.getAge() - user.getAge();//调用compare的前面的this的getage减去 后面的个体age。
//        }
//        return null;
//    }
}


public class UserSorter {
    public void sort(User[] users, Comparator comparator){
        for (int i = 0; i < users.length - 1; i++) {
            for (int j = 0; j < users.length - i - 1; j++) {
                if (comparator.compare(users[j],users[j+1]) > 0){
                    User temp = users[j];
                    users[j] = users[j+1];
                    users[j+1] = temp;

                }
            }
        }
    }
}


public interface Comparator {
    public Integer compare(User user1,User user2);
}


public class CompareAgeStrategy implements Comparator {
    public Integer compare(User user1,User user2){
        return user1.getAge() - user2.getAge();
    }
}


public class CompareHeightStrategy implements Comparator{
    public Integer compare(User user1, User user2) {
        return (int)(user1.getHeight() - user2.getHeight());
    }
}