国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【設(shè)計模式-03】Strategy策略模式及應(yīng)用場景

這篇具有很好參考價值的文章主要介紹了【設(shè)計模式-03】Strategy策略模式及應(yīng)用場景。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、簡要描述

  • Java 官方文檔

Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html

  • Java中使用到的策略模式

Comparator、comparable

Comparator (Java SE 18 & JDK 18)declaration: module: java.base, package: java.util, interface: Comparatorhttps://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Comparator.html

Comparable (Java SE 18 & JDK 18)declaration: module: java.base, package: java.lang, interface: Comparablehttps://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/Comparable.html

二、主要設(shè)計思想

對更改關(guān)閉,對擴(kuò)展開放,程序更有彈性,可擴(kuò)展性強(qiáng)。

Extensibility、Scalability

對任意數(shù)據(jù)類型的數(shù)組進(jìn)行排序,且可以靈活的定義排序策略。

如:定義一個貓對象有高和重量兩個屬性,可以靈活根據(jù)貓對象的屬性策略進(jìn)行排序。

三、重新調(diào)整修改

1、定義支持泛型的Comparator比較器

/**
 * @description: 比較器接口
 * @author: flygo
 * @time: 2022/7/4 16:26
 */
public interface Comparator<T> {

  int compare(T o1, T o2);
}

2、調(diào)整Sorter排序類和方法

/**
 * @description: 排序?qū)ο? * @author: flygo
 * @time: 2022/7/4 11:16
 */
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;
  }
}

3、定義貓高度的比較器

實(shí)現(xiàn)比較器Comparator接口中的compare方法,按貓的高度進(jìn)行比較

/**
 * @description: 貓按高比較
 * @author: flygo
 * @time: 2022/7/4 16:29
 */
public class CatHeightComparator implements Comparator<Cat> {

  @Override
  public int compare(Cat o1, Cat o2) {
    if (o1.getHeight() < o2.getHeight()) return -1;
    else if (o1.getHeight() > o2.getHeight()) return 1;
    else return 0;
  }
}

4、定義貓重量的比較器

/**
 * @description: 貓按體重比較
 * @author: flygo
 * @time: 2022/7/4 16:29
 */
public class CatWeightComparator implements Comparator<Cat> {

  @Override
  public int compare(Cat o1, Cat o2) {
    if (o1.getWeight() > o2.getWeight()) return -1;
    else if (o1.getWeight() < o2.getWeight()) return 1;
    else return 0;
  }
}

5、主方法實(shí)現(xiàn)排序

最終實(shí)現(xiàn)效果:可以自定貓的排序策略,對貓數(shù)組進(jìn)行排序。

如排序策略:CatHeightComparator、CatWeightComparator可以靈活根據(jù)策略進(jìn)行排序。

import java.util.Arrays;

/**
 * @description: 主方法
 * @author: flygo
 * @time: 2022/7/4 11:15
 */
public class StrategyMain {

  public static void main(String[] args) {
    Cat[] arr = {new Cat(3, 3), new Cat(5, 5), new Cat(1, 1)};

    Sorter sorter = new Sorter();

    //    CatHeightComparator comparator = new CatHeightComparator();
    CatWeightComparator comparator = new CatWeightComparator();

    sorter.sort(arr, comparator);

    System.out.println(Arrays.toString(arr));
  }
}

四、Lambda表達(dá)式寫法

Comparator接口只有一個方法,可以定義為函數(shù)式接口。如果默認(rèn)只有一個方法,@FunctionalInterface可以省略不寫。

1、Comparator 接口定義為 @FunctionalInterface

/**
 * @description: 比較器接口
 * @author: flygo
 * @time: 2022/7/4 16:26
 */
@FunctionalInterface
public interface Comparator<T> {

  int compare(T o1, T o2);
}

2、Lambda表達(dá)式調(diào)用方式

【設(shè)計模式-03】Strategy策略模式及應(yīng)用場景,MCA,# 設(shè)計模式,設(shè)計模式,策略模式,java,應(yīng)用場景

import java.util.Arrays;

/**
 * @description: 主方法
 * @author: flygo
 * @time: 2022/7/4 11:15
 */
public class StrategyMain {

  public static void main(String[] args) {
    method2();
  }

  private static void method2() {
    Cat[] arr = {new Cat(3, 3), new Cat(5, 5), new Cat(1, 1)};

    Sorter<Cat> sorter = new Sorter();

    //    CatHeightComparator comparator = new CatHeightComparator();
    CatWeightComparator comparator = new CatWeightComparator();

    sorter.sort(
        arr,
        (o1, o2) -> {
          if (o1.getHeight() < o2.getHeight()) return -1;
          else if (o1.getHeight() > o2.getHeight()) return 1;
          else return 0;
        });

    System.out.println(Arrays.toString(arr));
   }
 }

五、源碼地址

GitHub - jxaufang168/Design-Patterns: 設(shè)計模式學(xué)習(xí)設(shè)計模式學(xué)習(xí). Contribute to jxaufang168/Design-Patterns development by creating an account on GitHub.https://github.com/jxaufang168/Design-Patterns文章來源地址http://www.zghlxwxcb.cn/news/detail-813301.html

到了這里,關(guān)于【設(shè)計模式-03】Strategy策略模式及應(yīng)用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java設(shè)計模式—策略模式(Strategy Mode)

    目錄 前言 一、策略模式的簡介 二、策略模式的概念 三、策略模式的作用 四、策略模式的優(yōu)、缺點(diǎn) 策略模式的優(yōu)點(diǎn): 策略模式的缺點(diǎn): 五、策略模式應(yīng)用場景 六、代碼案例 1)抽象接口類 2)具體的策略類:減 3)具體策略類:打折 4)上下文類 5)客戶端Main代碼測試 總結(jié)

    2024年02月08日
    瀏覽(34)
  • 大話設(shè)計模式——18.策略模式(Strategy Pattern)

    大話設(shè)計模式——18.策略模式(Strategy Pattern)

    簡介 是一系列算法的封裝,即做的事情相同(方法名稱相同)但是實(shí)現(xiàn)的方式不同,以相同方式調(diào)用所有的算法,減少算法與使用算法的耦合。直接調(diào)用方法。 UML圖 應(yīng)用場景 Java AWT中的LayoutManager(布局管理器) 系統(tǒng)中存在多個類,它們的區(qū)別僅在于它們的行為 不希望暴露

    2024年04月13日
    瀏覽(21)
  • 設(shè)計模式二十二:策略模式(Strategy Pattern)

    定義一系列算法,將每個算法封裝成獨(dú)立的對象,并使這些對象可互相替換。這使得在運(yùn)行時可以動態(tài)地選擇算法,而不必改變使用算法的客戶端代碼。策略模式的主要目標(biāo)是將算法的定義與使用分離,使得客戶端可以根據(jù)需要靈活地選擇和切換不同的算法,而不影響到客戶

    2024年02月11日
    瀏覽(20)
  • C++設(shè)計模式_04_Strategy 策略模式

    接上篇,本篇將會介紹C++設(shè)計模式中的 Strategy 策略模式 ,和上篇 模板方法Template Method 一樣,仍屬于“組件協(xié)作”模式,它與Template Method有著異曲同工之妙。 在軟件構(gòu)建過程中,某些對象使用的算法可能多種多樣?

    2024年02月09日
    瀏覽(19)
  • 實(shí)際開發(fā)中常用的設(shè)計模式--------策略模式(知識跟業(yè)務(wù)場景結(jié)合)-----小白也能看懂(通俗易懂版本)

    1.策略模式定義: 策略模式是一種行為型設(shè)計模式,它允許在運(yùn)行時動態(tài)地改變對象的行為。策略模式將將每一個算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以相互替換從而使得算法的變化不會影響到客戶端 2.簡單的策略模式示例代碼: 在上述代碼中,SortStra

    2024年02月13日
    瀏覽(29)
  • 設(shè)計模式應(yīng)用場景

    工廠模式(Factory Pattern):使用工廠方法創(chuàng)建對象,而不是使用new直接實(shí)例化對象。 抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關(guān)對象的接口,而無需指定它們的具體類。 單例模式(Singleton Pattern):限制一個類只能有一個實(shí)例并提供一個全局訪問點(diǎn)

    2024年02月09日
    瀏覽(21)
  • 策略模式,一種廣泛應(yīng)用于各種情況的設(shè)計模式(設(shè)計模式與開發(fā)實(shí)踐 P5)

    定義:定義一系列算法,把它們一個個封裝起來,并且可以互相替換 例如,我們要計算年終獎,年終獎根據(jù)績效 A、B、C 來計算最終數(shù)值 最初我們很容易想到用 分支 if 來解決這個問題,如果績效 = A 則工資 x 2,如果績效 = B 則工資 x 3 如果經(jīng)常使用這樣的分支結(jié)構(gòu),你會發(fā)現(xiàn)

    2024年02月07日
    瀏覽(27)
  • 解鎖Spring Boot中的設(shè)計模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    解鎖Spring Boot中的設(shè)計模式—03.委派模式:探索【委派模式】的奧秘與應(yīng)用實(shí)踐!

    委派模式 是一種負(fù)責(zé)任務(wù)的調(diào)度和分配模式,類似于代理模式但更注重結(jié)果而非過程。它可以被視為一種特殊情況下的靜態(tài)代理的全權(quán)代理,但并不屬于GOF 23種設(shè)計模式之一,而是歸類為行為型模式。 委派模式在Spring框架中廣泛應(yīng)用,其中最常見的例子是 DispatcherServlet ,它

    2024年02月19日
    瀏覽(27)
  • 前端的23種設(shè)計模式及應(yīng)用場景

    前端的23種設(shè)計模式及應(yīng)用場景

    設(shè)計模式是在軟件開發(fā)中經(jīng)過驗(yàn)證的解決問題的方法。它們是從經(jīng)驗(yàn)中總結(jié)出來的,可以幫助我們更好地組織和管理代碼,提高代碼的可維護(hù)性、可擴(kuò)展性和可重用性。無論是前端還是后端開發(fā),設(shè)計模式都扮演著重要的角色。在本專欄中,我們將探索一些常見的前端設(shè)計模

    2024年02月20日
    瀏覽(38)
  • GOF 23 種設(shè)計模式應(yīng)用場景分析

    本文看下GOF 23 種設(shè)計模式應(yīng)用場景,詳細(xì)的還是通過文章給出參考鏈接學(xué)習(xí)下。 參考這篇文章 。 有幾種產(chǎn)品需要創(chuàng)建,比如創(chuàng)建紅蘋果,青蘋果,綠蘋果,這些對象通過一個對象就可以。 參考這篇文章 。 有幾種產(chǎn)品需要創(chuàng)建,但是每種產(chǎn)品不能簡單的通過一個對象來表示

    2024年02月16日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包