首页 > 编程语言 > 详细

java-基础知识-设计模式-策略模式

时间:2020-06-26 17:31:48      阅读:57      评论:0      收藏:0      [点我收藏+]

策略模式:  做一件事情时,不同的执行方式

例如:下列代码

定义了一种排序方法sort,根据传进来的comparator 对象(根据什么排序)。实现对象的排序

package com.atguigu.test.designPattern.Strategy;
import com.atguigu.modules.entity.Person;
import java.util.Arrays;
import java.util.Comparator;

public class ObjectCompare2<T>{
    public  void  sort(T[] arr,Comparator<T> comparator){
        for (int i = 0; i <arr.length-1; i++) {
                int minPos=i;
            for (int j =i+1; j < arr.length; j++) {
                minPos= comparator.compare(arr[j],arr[minPos])==-1?j:minPos;
            }
            swap(arr,i,minPos);
        }
    }
    public  void swap(T[] arr,int i,int j){
        T temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public static void main(String[] args) {
        Person[] arr={new Person(10,500),new Person(12,300),
                new Person(5,100),new Person(20,1000)};
        ObjectCompare2<Person> personObjectCompare2 = new ObjectCompare2<>();

        //根据age排序
        personObjectCompare2.sort(arr, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if(o1.getAge()<o2.getAge()){
                    return -1;
                }else if(o1.getAge()>o2.getAge()){
                    return 1;
                }
                return 0;
            }
        });
        System.out.println(Arrays.toString(arr));

        //根据balance排序
        personObjectCompare2.sort(arr, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if(o1.getBalance()<o2.getBalance()){
                    return -1;
                }else if(o1.getBalance()>o2.getBalance()){
                    return 1;
                }
                return 0;
            }
        });
        System.out.println(Arrays.toString(arr));

        //函数型接口  适用于lambda表达式的接口   函数型接口就是只有一个抽象方法的接口
        personObjectCompare2.sort(arr,(o1,o2)->{
            if(o1.getAge()<o2.getAge()){
                return -1;
            }else if(o1.getAge()>o2.getAge()){
                return 1;
            }
            return 0;
        });
        System.out.println(Arrays.toString(arr));

    }
}

 

java-基础知识-设计模式-策略模式

原文:https://www.cnblogs.com/zxj-study/p/13195393.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!