最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

一、Comparable --狗比較

缺點(diǎn):自定義排序規(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方法驗(yàn)證

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)點(diǎn),可以定義多種比較策略,不需要改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校驗(yàn)

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

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

當(dāng)使用策略模式時(shí),需要實(shí)現(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)文章

  • SpringBoot整合Shiro和Redis的示例代碼

    SpringBoot整合Shiro和Redis的示例代碼

    這篇文章主要介紹了SpringBoot整合Shiro和Redis的示例代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 深入了解Spring中的依賴注入DI

    深入了解Spring中的依賴注入DI

    這篇文章主要介紹了Spring?中的依賴注入,包括注入的方式,寫法,該選擇哪個(gè)注入方式以及可能出現(xiàn)的循環(huán)依賴問題等內(nèi)容,需要的可以參考一下
    2023-06-06
  • Spring管理Controller可行性原理示例分析

    Spring管理Controller可行性原理示例分析

    這篇文章主要為大家介紹了Spring管理Controller可行性原理示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • JAVA模擬新增順序表及單鏈表

    JAVA模擬新增順序表及單鏈表

    這篇文章主要介紹了JAVA模擬新增順序表及單鏈表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring整合Mybatis思路梳理總結(jié)

    Spring整合Mybatis思路梳理總結(jié)

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作,本篇文章帶你了解Spring整合Mybatis的思路
    2022-02-02
  • 最新版IDEA配置 Tomcat的詳細(xì)過程

    最新版IDEA配置 Tomcat的詳細(xì)過程

    本文介紹如何在IDEA中配置Tomcat服務(wù)器,并創(chuàng)建Web項(xiàng)目,首先檢查Tomcat是否安裝完成,然后在IDEA中創(chuàng)建Web項(xiàng)目并添加Web結(jié)構(gòu),接著,配置編譯輸出路徑和依賴,將Tomcat的jar包復(fù)制到項(xiàng)目中,最后,配置Tomcat服務(wù)器并運(yùn)行項(xiàng)目,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-01-01
  • java 中序列化NotSerializableException問題解決辦法

    java 中序列化NotSerializableException問題解決辦法

    這篇文章主要介紹了java 中序列化NotSerializableException問題解決辦法的相關(guān)資料,這里對序列化問題進(jìn)行描述說明,并提供解決辦法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • Springboot整合Druid實(shí)現(xiàn)對訪問的監(jiān)控方式

    Springboot整合Druid實(shí)現(xiàn)對訪問的監(jiān)控方式

    這篇文章主要介紹了Springboot整合Druid實(shí)現(xiàn)對訪問的監(jiān)控方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java解決同時(shí)出庫入庫訂單號(hào)自動(dòng)獲取問題解決

    Java解決同時(shí)出庫入庫訂單號(hào)自動(dòng)獲取問題解決

    在Java中,處理多線程環(huán)境下的訂單號(hào)生成問題可以采用多種策略,如使用AtomicLong保證線程安全,通過定義訂單號(hào)生成器并利用線程模擬出庫和入庫操作,每個(gè)線程從訂單號(hào)生成器中獲取唯一訂單號(hào),感興趣的朋友一起看看吧
    2024-09-09
  • 深入了解Java中循環(huán)結(jié)構(gòu)的使用

    深入了解Java中循環(huán)結(jié)構(gòu)的使用

    Java中有三種主要的循環(huán)結(jié)構(gòu):while 循環(huán)、do…while 循環(huán)和for 循環(huán)。本文將來和大家一起講講Java中這三個(gè)循環(huán)的使用,需要的可以參考一下
    2022-08-08

最新評論

宝应县| 仲巴县| 视频| 钟山县| 鲁山县| 平顺县| 白城市| 四会市| 嘉义县| 射洪县| 萨迦县| 崇州市| 乐陵市| 湟源县| 巴南区| 罗山县| 昆山市| 宝清县| 饶阳县| 乾安县| 曲水县| 博乐市| 弥渡县| 佛冈县| 株洲市| 手机| 兴义市| 康定县| 临朐县| 资中县| 永安市| 平塘县| 新兴县| 娄烦县| 宜宾市| 彭阳县| 邵东县| 玛曲县| 东乡县| 体育| 邓州市|