激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java設計模式之策略模式定義與用法詳解

Java設計模式之策略模式定義與用法詳解

2021-04-02 15:37yang_tang Java教程

這篇文章主要介紹了Java設計模式之策略模式定義與用法,結合具體實例形式詳細分析了Java策略模式的概念、原理、定義及相關操作技巧,需要的朋友可以參考下

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

一. 定義:

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

二. 優點:

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

三. 實例:

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

實驗要求:

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

?
1
2
3
4
5
public class Worker {
  int id;
  String name;
  int age;
}

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

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

?
1
Worker searchWorker(List<Worker> workers);

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

1. 策略

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

WorkStrategy .java

?
1
2
3
4
import java.util.List;
public interface WorkStrategy {
  public Worker AgeAverage(List<Worker> list);
}

2. 上下文

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

MaxAge.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
  }
}

5. 運行結果:

Java設計模式之策略模式定義與用法詳解

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://blog.csdn.net/yang_tang/article/details/78240531

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久成人免费网 | 极品大长腿啪啪高潮露脸 | 激情综合网俺也去 | 蝌蚪久久窝 | 性爱视频在线免费 | 一色桃子av大全在线播放 | 色综合久久久久综合99 | 在线成人毛片 | 亚洲精品一区二区三区在线看 | 久久精品中文字幕一区二区三区 | 成人9禁啪啪无遮挡免费 | 久久经典国产视频 | 精品国产一区二 | 国产精品剧情一区二区三区 | 国产精品区在线12p 午夜视频在线免费播放 | 久久精品国产清自在天天线 | 久久久久久久久久久综合 | 亚洲精品成人久久久 | 欧美亚洲国产日韩 | 1314成人网 | 国产精品久久久久久久久久东京 | 天堂成人一区二区三区 | 日本人乱人乱亲乱色视频观看 | 亚洲成人精品视频 | 成人精品久久 | 欧美一级鲁丝片免费看 | 性猛aa久久久 | 国产自在自线午夜精品视频在 | 在线a亚洲视频播放在线观看 | 线观看免费完整aaa 一二区成人影院电影网 | 斗罗破苍穹在线观看免费完整观看 | 欧美a级在线免费观看 | 欧美18一12sex性处hd | 中国女警察一级毛片视频 | 久久草在线视频国产 | 久久av高清| 亚洲无毛av | 国产精品jk白丝蜜臀av软件 | 福利免费在线观看 | 亚洲午夜视频在线 | 亚洲成人第一页 |