欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java之策略模式比較器案例講解

 更新時間:2021年08月10日 08:41:17   作者:無敵小田田  
這篇文章主要介紹了Java之策略模式比較器案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

Comparable 比較器,內(nèi)置定義的比較方法,實現(xiàn)比較 較簡單

Comparator 策略模式,需要定義不同的策略和比較的對象,實現(xiàn)比較 較復(fù)雜

打個比方,狗有foot一種屬性我們用Comparable比較器完成比較

貓有height和weight兩種屬性,我們用Comparator策略模式完成比較

一、Comparable --狗比較

缺點:自定義排序規(guī)則,規(guī)則定義好之后,再改起來就不方便,還需要重新開發(fā)Sort比較類

1、狗對象

package com.longze.guosh.strategy;
 
public class Dog implements Comparable<Dog> {
    int food;  //狗的飯量
    public Dog(int food){
        this.food=food;
    }
    @Override  //自定義排序規(guī)則,規(guī)則定義好之后,再改起來就不方便
    public int compareTo(Dog d) {
        if(this.food<d.food) return -1;
        else if(this.food>d.food) return 1;
        else return 0;
    }
 
    @Override
    public String toString() {
        return "Dog{" +
                "food=" + food +
                '}';
    }
}

2、狗的比較類,也可以代表貓的汽車的比較類,但是比較策略無法修改((除非改原來的方法))

package com.longze.guosh.strategy;
 
import java.util.Comparator;
 
public class DogSorter {
    //排序
    public static void sort(Comparable[] arr){
        for(int i=0;i< arr.length-1;i++){
            int minPos=i;
            for(int j=i+1;j<arr.length;j++){
                minPos=arr[j].compareTo(arr[minPos])==-1?j:minPos;
            }
            swap(arr,i,minPos);
        }
    }
    //交換
    static void swap(Comparable[] arr,int i,int j){
        Comparable temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
}

3、main方法驗證

package com.longze.guosh.strategy;
 
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        Dog[] ds= {new Dog(8),new Dog(5),new Dog(10),new Dog(1)};
        //comparater
        DogSorter dogsorter=new DogSorter();
        dogsorter.sort(ds);
        System.out.println("Dogs==="+Arrays.toString(ds));
 
    }
}

二、Comparator 策略模式

優(yōu)點,可以定義多種比較策略,不需要改sort比較類

1、貓對象

package com.longze.guosh.strategy;
 
public class Cat{
    int weight,height;
    public Cat(int weight,int height){
        this.height=height;
        this.weight=weight;
    }
    @Override
    public String toString() {
        return "Cat{" +
                "weight=" + weight +
                ", height=" + height +
                '}';
    }
}

2、貓的比較策略,可以有多種策略

如【CatHeightComparator.java】身高比較器  【CatWeightComparator】體重比較器

package com.longze.guosh.strategy;
 
import java.util.Comparator;
 
public class CatHeightComparator implements Comparator<Cat> {
 
    @Override
    public int compare(Cat o1, Cat o2) {
        if (o1.height > o2.height) {
            return -1;
        } else if (o1.height < o2.height) {
            return 1;
        }else {
            return 0;
        }
    }
}
package com.longze.guosh.strategy;
 
import java.util.Comparator;
 
public class CatWeightComparator implements Comparator<Cat> {
 
    @Override
    public int compare(Cat o1, Cat o2) {
        if (o1.weight < o2.weight) {
            return -1;
        } else if (o1.weight > o2.weight) {
            return 1;
        }else {
            return 0;
        }
    }
}

3、比較器 也可以用作狗或者其他比較類,比較策略可以重新指定不同的

package com.longze.guosh.strategy;
 
import java.util.Comparator;
 
public class Sorter<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);
        }
    }
     void swap(T[] arr,int i,int j){
        T temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
 
}

4、Main校驗

package com.longze.guosh.strategy;
 
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        Cat[] cs={new Cat(3,3),new Cat(5,5),new Cat(1,1),new Cat(10,10)};
        //comparator
        Sorter<Cat> catsorter=new Sorter<>();
        catsorter.sort(cs,new CatHeightComparator());
        System.out.println("Cat==="+Arrays.toString(cs));
 
    }
}

綜上所述 使用簡單比較器直接實現(xiàn)Comparable類,就可以完成

當(dāng)使用策略模式時,需要實現(xiàn)不同的Comparator策略,配合Sort可以完成比較

Git地址:https://gitee.com/feng-qingxuan/dessign-pattrns.git  strategy

到此這篇關(guān)于Java之策略模式比較器案例講解的文章就介紹到這了,更多相關(guān)Java之策略模式比較器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Java中字符串indexof() 的使用方法

    基于Java中字符串indexof() 的使用方法

    今天小編就為大家分享一篇基于Java中字符串indexof() 的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 解決java.sql.SQLException:?validateConnection?false問題的方法匯總(最全)

    解決java.sql.SQLException:?validateConnection?false問題的方法匯總(最

    這篇文章主要給大家介紹了關(guān)于解決java.sql.SQLException:?validateConnection?false問題的方法匯總,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 深入解析kafka 架構(gòu)原理

    深入解析kafka 架構(gòu)原理

    Kafka使用領(lǐng)域非常廣泛,在大數(shù)據(jù)時代kafka使用真香,LinkedIn、Microsoft和Netflix每天都用Kafka處理萬億級的信息。本文就讓我們一起來大白話kafka的架構(gòu)原理,感興趣的朋友一起看看吧
    2021-11-11
  • Java實現(xiàn)統(tǒng)計文件夾下所有文件的字?jǐn)?shù)

    Java實現(xiàn)統(tǒng)計文件夾下所有文件的字?jǐn)?shù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)統(tǒng)計文件夾下所有文件的字?jǐn)?shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Java Comparable及Comparator接口區(qū)別詳解

    Java Comparable及Comparator接口區(qū)別詳解

    這篇文章主要介紹了Java Comparable及Comparator接口區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Maven配置文件pom.xml詳解

    Maven配置文件pom.xml詳解

    什么是POM?這篇文章主要介紹了Maven的配置文件pom.xml,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot和Vue2項目配置https協(xié)議過程

    SpringBoot和Vue2項目配置https協(xié)議過程

    本文詳細(xì)介紹了SpringBoot項目和Vue2項目的部署流程及SSL證書配置,對于SpringBoot項目,需將.pfx文件放入resources目錄并配置server,然后打包部署,Vue2項目中,涉及檢查nginx的SSL模塊、編譯新的nginx文件
    2024-10-10
  • 帶著新人看java虛擬機01(推薦)

    帶著新人看java虛擬機01(推薦)

    這篇文章主要介紹了java虛擬機,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 淺析java中asList的使用詳解

    淺析java中asList的使用詳解

    Java中的asList方法是數(shù)組工具類 Arrays中的一個靜態(tài)方法,asList()方法把數(shù)組轉(zhuǎn)換成集合時,不能使用其修改集合相關(guān)的方法,本文通過示例代碼給大家介紹java asList使用,感興趣的朋友一起看看吧
    2021-10-10
  • 詳解查看JAVA API及JAVA源碼的方法

    詳解查看JAVA API及JAVA源碼的方法

    這篇文章主要介紹了查看JAVA API及JAVA源碼的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論