国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - Java設計模式之策略模式原理與用法實例詳解

Java設計模式之策略模式原理與用法實例詳解

2021-04-24 10:56aronykl Java教程

這篇文章主要介紹了Java設計模式之策略模式原理與用法,結合實例形式較為詳細的分析了Java策略模式的概念、原理、定義及使用方法,并總結了相關的優缺點,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了java設計模式策略模式原理與用法。分享給大家供大家參考,具體如下:

策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。其中jdk里面的treeset類和treemap類就用到了策略模式。這兩個類是帶排序的集合類,其中排序的規則就相當于策略模式里定義的一系列算法,而集合類就相當于是策略模式里的環境類,供用戶使用,用只知道treeset和treemap是帶排序的,至于怎么排序的,是由排序的算法決定的。

策略模式由三部分組成:抽象策略角色,具體策略角色,環境角色。

抽象策略角色:策略類,通常由一個接口或者抽象類實現。

具體策略角色:實現了抽象策略類,并包裝了相關的算法和行為。

環境角色:持有一個策略類的引用,最終給客戶端調用。

下面提供一個簡單的策略模式的代碼實例:

1.抽象策略角色:定義一個接口strategy。

?
1
2
3
4
5
6
7
8
9
package com.test;
/**
 * 策略模式抽象角色
 * @author zhouwen
 *
 */
public interface strategy {
  public int calculate(int a, int b);
}

2.具體策略角色:實現strategy接口。例子中是實現加減乘除的運算。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test;
/**
 * 策略模式具體策略類
 * 實現加法運算
 * @author zhouwen
 *
 */
public class addstrategy implements strategy {
  @override
  public int calculate(int a, int b) {
    return a + b;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test;
/**
 * 策略模式具體策略類
 * 實現減法運算
 * @author zhouwen
 *
 */
public class subtractstrategy implements strategy {
  @override
  public int calculate(int a, int b) {
    return a - b;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test;
/**
 * 策略模式具體策略類
 * 實現乘法運算
 * @author zhouwen
 *
 */
public class multiplystragety implements strategy {
  @override
  public int calculate(int a, int b) {
    return a * b;
  }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.test;
/**
 * 策略模式具體策略類
 * 實現除法運算
 * @author zhouwen
 *
 */
public class dividestrategy implements strategy {
  @override
  public int calculate(int a, int b) {
    return a / b;
  }
}

3.環境角色:在環境角色中定義一個抽象角色的引用,并暴露出計算的方法,供客戶端調用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.test;
/**
 * 策略模式環境類
 * @author zhouwen
 *
 */
public class environment {
  private strategy strategy;
  public environment(strategy strategy){
    this.strategy = strategy;
  }
  //用以改變策略
  public void setstrategy(strategy strategy){
    this.strategy = strategy;
  }
  public strategy getstrategy(){
    return strategy;
  }
  //暴露計算的接口,供客戶端調用
  public int calculate(int a, int b){
    return strategy.calculate(a, b);
  }
}

4.最后編寫客戶端的代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.test;
public class client {
  public static void main(string[] args) {
    addstrategy addstrategy = new addstrategy();
    environment environment = new environment(addstrategy);
    system.out.println(environment.calculate(3, 4));
    subtractstrategy substrategy = new subtractstrategy();
    environment.setstrategy(substrategy);
    system.out.println(environment.calculate(3, 4));
    multiplystragety multiplystrategy = new multiplystragety();
    environment.setstrategy(multiplystrategy);
    system.out.println(environment.calculate(3, 4));
    dividestrategy dividestrategy = new dividestrategy();
    environment.setstrategy(dividestrategy);
    system.out.println(environment.calculate(3, 4));
  }
}

總結:

由客戶端的system.out.println(environment.calculate(3, 4));這句代碼,我們并不知道具體調用的是哪個實現類,只有知道了傳給環境角色的具體策略類我們才知道調用哪個類,這樣就能實現客戶端和具體策略算法的分離,使程序易于切換、易于理解、易于擴展。

策略模式的優缺點:

優點:

1.策略模式的用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得他們可以相互替換。如提供的例子中通過set方法對策略進行替換。

2.策略模式使得算法可以在不影響客戶端的情況下發生變化。使用策略模式可以把行為和環境分隔開。

3.環境類負責維持和查詢行為類,各類算法則在具體策略中提供。由于算法和環境獨立開來,算法的修改不會影響環境和客戶端。

缺點:

1.客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。

2.會造成很多的策略類。

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

原文鏈接:https://blog.csdn.net/zw19910924/article/details/41556493

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本久久精品视频 | 色婷婷综合网 | 久久综合久 | 午夜社区 | 欧美在线日韩 | 日韩av免费在线 | 亚洲欧美日韩精品久久奇米色影视 | 成人自拍视频 | 日韩电影免费观看 | 日本一区二区三区中文字幕 | 91av在线视频观看 | 国产精品网站在线观看 | 亚洲精品成人 | 日韩看片 | 久久久久无码国产精品一区 | 日韩欧美成人一区二区三区 | 国产精品永久免费视频 | 台湾av片| 成人福利在线 | 免费看的毛片 | 国产精品一区二区久久 | 免费嗨片网| 黄色一级大片在线免费看产 | 欧美一级片在线观看 | 国产色在线观看 | 精品第一页 | 久久久国产精品久久久 | 亚洲一区中文字幕在线 | 日韩日韩日韩日韩日韩日韩 | 中国一级黄色片子 | 久久97视频 | 中文字幕免费在线观看视频 | 久久久久久久久综合 | 97久久精品| 欧美大黄大色一级毛片 | 亚洲一区二区三区四区五区午夜 | 久久久精品456亚洲影院 | 成人午夜性成交 | 一本大道香蕉大a√在线 | 成人网在线视频 | 精品国产欧美一区二区 |