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

Java設(shè)計(jì)模式之策略模式定義與用法詳解

 更新時(shí)間:2018年02月08日 11:28:52   作者:yang_tang  
這篇文章主要介紹了Java設(shè)計(jì)模式之策略模式定義與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了Java策略模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java策略模式定義與用法。分享給大家供大家參考,具體如下:

一. 定義:

定義一系列算法,把他們一個(gè)一個(gè)封裝起來,并且使他們可以相互替換.

二. 優(yōu)點(diǎn):

(1)上下文(Context)和具體策略(ConcreteStrategy)是松耦合關(guān)系,因此上下文只需要知道他要使用某一個(gè)實(shí)現(xiàn)  Strategy接口類的實(shí)例,但不需要知道是哪個(gè)類.
(2)策略模式滿足開閉原則,當(dāng)增加新的具體類時(shí),不需要修改上下文類的代碼,上下文即可以引用新的具體策略的實(shí)例.

三. 實(shí)例:

下面就通過一個(gè)問題來詳細(xì)解釋一下策略模式.

實(shí)驗(yàn)要求:

小丁是阿里巴巴公司程序員,這天項(xiàng)目經(jīng)理給他一個(gè)類定義

public class Worker {
  int id;
  String name;
  int age;
}

小丁一看,這不是一個(gè)工人的定義嗎,包括編號id,姓名,年齡什么的。

經(jīng)理說,我需要你寫一個(gè)功能,能找出一批工人中年齡最大的一位。方法聲明是(或者類似)這樣的:

Worker searchWorker(List<Worker> workers);

參數(shù)List<Worker> workers是這批工人數(shù)據(jù)。如果查到了年齡最大的工人,則返回這個(gè)Worker對象。如workers沒有節(jié)點(diǎn)時(shí),返回null。
答案:

1. 策略

在策略模式中,這個(gè)接口被命名為WorkStrategy (在具體問題中,這個(gè)名字可以根據(jù)具體問題命名),代碼如下:

WorkStrategy .java

import java.util.List;
public interface WorkStrategy {
  public Worker AgeAverage(List<Worker> list);
}

2. 上下文

上下文面向策略,既是面向接口的類;代碼如下:

MaxAge.java

import java.util.List;
public class MaxAge {
  WorkStrategy workstrategy;
  public void SetWorkStrategy(WorkStrategy workstrategy){
    this.workstrategy=workstrategy;
  }
  public Worker getFindMax(List<Worker> list){
    if(workstrategy!=null)
      return workstrategy.AgeAverage(list);
    else{
      return null;
    }
  }
}

3. 具體策略

具體策略是實(shí)現(xiàn)WorkStrategy接口的類,即必須重寫接口中的abstract Worker
AgeAverage(List<Worker> list)方法

代碼如下:

StrategyMaxAge.java

import java.util.List;
public class StrategyMaxAge implements WorkStrategy{
  @Override
  public Worker AgeAverage(List<Worker> list) {
    int fs[] = new int[list.size()];
    int maxage = 0;
    for (int j = 0; j < list.size(); j++) {
      fs[j]=list.get(j).getAge();
      if (fs[maxage] <= fs[j]) {
        maxage = j;
      }
    }
    return list.get(maxage);
  }
}

4. 策略模式的使用

Application.java

import java.util.ArrayList;
import java.util.List;
public class Application {
  public static void main(String[] args) {
    List<Worker> list = new ArrayList<>();
    list.add(new Worker(1, "張三", 30));
    list.add(new Worker(2, "李四", 40));
    list.add(new Worker(3, "王五", 33));
    MaxAge findage = new MaxAge();
    findage.SetWorkStrategy(new StrategyMaxAge());
    Worker findw = findage.getFindMax(list);
    System.out.println("腳本之家測試結(jié)果:");
    System.out.println("年齡最大的工人:"+findw.getId()+" "+findw.getName()+" "+findw.getAge());
  }
}
class Worker{
  int id;
  String name;
  int age;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age =age;
  }
  public Worker(int id, String name, int age) {
    super();
    this.id = id;
    this.name = name;
    this.age = age;
  }
  public Worker() {
    super();
    // TODO Auto-generated constructor stub
  }
}

5. 運(yùn)行結(jié)果:

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Nacos配置中心同一個(gè)命名空間下配置文件引用原理分析

    Nacos配置中心同一個(gè)命名空間下配置文件引用原理分析

    這篇文章主要介紹了Nacos配置中心同一個(gè)命名空間下配置文件引用原理分析,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java中的StopWatch計(jì)時(shí)利器使用指南

    Java中的StopWatch計(jì)時(shí)利器使用指南

    StopWatch通常用于測量一段代碼執(zhí)行所花費(fèi)的時(shí)間,它能夠精確地記錄開始時(shí)間、結(jié)束時(shí)間,并計(jì)算出這中間的時(shí)間差,下面給大家介紹Java中的StopWatch計(jì)時(shí)利器的深度解析與使用指南,感興趣的朋友一起看看吧
    2025-05-05
  • 利用java批量給pdf加水印的方法示例

    利用java批量給pdf加水印的方法示例

    這篇文章主要介紹了利用java批量給pdf加水印的方法,文中給出了簡單的示例代碼,需要的朋友可以參考借鑒,下面來一起看吧。
    2017-03-03
  • HttpsURLConnection上傳文件流(實(shí)例講解)

    HttpsURLConnection上傳文件流(實(shí)例講解)

    下面小編就為大家?guī)硪黄狧ttpsURLConnection上傳文件流(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例

    Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例

    這篇文章主要介紹了Java中SimpleDateFormat日期格式轉(zhuǎn)換詳解及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java使用Tinify實(shí)現(xiàn)圖片無損壓縮(4M無損壓縮到1M)的方法

    Java使用Tinify實(shí)現(xiàn)圖片無損壓縮(4M無損壓縮到1M)的方法

    在當(dāng)今的數(shù)字化時(shí)代,圖片已成為網(wǎng)站、應(yīng)用和社交媒體中不可或缺的元素,然而,大尺寸的圖片不僅會增加頁面或者客戶端加載時(shí)間,還會占用大量的存儲空間,本文將詳細(xì)介紹如何利用Tinify壓縮圖片,并將其上傳至OSS,重點(diǎn)介紹圖片壓縮實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-08-08
  • java emoji表情存儲的解決方法

    java emoji表情存儲的解決方法

    這篇文章主要為大家詳細(xì)介紹了java emoji表情存儲的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 關(guān)于fastjson的@JSONField注解的一些問題(詳解)

    關(guān)于fastjson的@JSONField注解的一些問題(詳解)

    下面小編就為大家?guī)硪黄P(guān)于fastjson的@JSONField注解的一些問題(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Jenkins如何實(shí)現(xiàn)自動打包部署linux

    Jenkins如何實(shí)現(xiàn)自動打包部署linux

    這篇文章主要介紹了Jenkins如何實(shí)現(xiàn)自動打包部署linux,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟

    SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

余江县| 沙河市| 广西| 平遥县| 江山市| 临泉县| 奈曼旗| 大厂| 城步| 广饶县| 遵化市| 栖霞市| 洛浦县| 恩施市| 祁连县| 登封市| 乐亭县| 菏泽市| 保德县| 寿宁县| 南溪县| 随州市| 天台县| 桐乡市| 丰镇市| 承德市| 文化| 林芝县| 湛江市| 日土县| 荣成市| 洛南县| 武汉市| 长乐市| 武冈市| 阳西县| 丹巴县| 东港市| 威信县| 灵武市| 汨罗市|