91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中策略模式如何使用

發布時間:2021-07-12 10:43:39 來源:億速云 閱讀:134 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中策略模式如何使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一. 定義:

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

二. 優點:

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

三. 實例:

下面就通過一個問題來詳細解釋一下策略模式.

實驗要求:

小丁是阿里巴巴公司程序員,這天項目經理給他一個類定義

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

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

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

Worker searchWorker(List<Worker> workers);

參數List<Worker> workers是這批工人數據。如果查到了年齡最大的工人,則返回這個Worker對象。如workers沒有節點時,返回null。
答案:

1. 策略

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

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. 具體策略

具體策略是實現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("億速云測試結果:");
    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
  }
}

關于Java中策略模式如何使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇坪县| 新沂市| 长顺县| 淮滨县| 日喀则市| 稷山县| 诸暨市| 西乌珠穆沁旗| 永安市| 金溪县| SHOW| 册亨县| 盱眙县| 裕民县| 新邵县| 石台县| 普定县| 深泽县| 咸丰县| 错那县| 乌拉特后旗| 台北市| 新巴尔虎左旗| 专栏| 东丽区| 平度市| 友谊县| 会同县| 麻江县| 孝感市| 庆云县| 鸡东县| 阳城县| 临洮县| 西林县| 余江县| 甘南县| 太白县| 桂林市| 方正县| 达尔|