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());
}
}