一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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策略模式的概念、原理、定義及使用方法,并總結了相關的優(yōu)缺點,具有一定參考借鑒價值,需要的朋友可以參考下

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

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

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

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

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

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

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

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.具體策略角色:實現(xiàn)strategy接口。例子中是實現(xiàn)加減乘除的運算。

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

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

?
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;
/**
 * 策略模式環(huán)境類
 * @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));這句代碼,我們并不知道具體調用的是哪個實現(xiàn)類,只有知道了傳給環(huán)境角色的具體策略類我們才知道調用哪個類,這樣就能實現(xiàn)客戶端和具體策略算法的分離,使程序易于切換、易于理解、易于擴展。

策略模式的優(yōu)缺點:

優(yōu)點:

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

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

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

缺點:

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99爱在线精品视频免费观看9 | 被强迫变性翘秘书 | 91寡妇天天综合久久影院 | 大象传媒免费网址 | 男人j放进女人的p视频免费 | 情侣奴伺候女王第2部分小说 | 国产99页| sihu国产午夜精品一区二区三区 | 亚洲精品www久久久久久久软件 | 精品一产品大全 | 国产亚洲精品精品国产亚洲综合 | 国产免费资源高清小视频在线观看 | 免费真实播放国产乱子伦 | 久久这里有精品 | 欧美日韩高清完整版在线观看免费 | 三上悠亚国产精品一区 | 免费成年网站 | 波多野结衣在线观看视频 | 亚洲国产精品第一页 | 亚洲区精品久久一区二区三区 | 日韩欧美色 | 久久免费看少妇高潮A片特爽 | 动漫美女被吸乳羞羞小说 | 亚洲网色| 国产美女下面流出白浆视频 | 五月婷婷伊人网 | 美女视频黄a| 成年人视频在线免费看 | 男人天堂资源 | 国产日韩精品欧美一区 | 亚洲精品人成网在线播放影院 | 国产高清在线观看 | mm131亚洲精品久久 | 人人干97| 成人免费视频一区二区 | 日韩亚洲欧美理论片 | 美女的让男人桶爽30分钟的 | 国产99视频精品免视看7 | 四虎永久免费地址在线网站 | 免费视频左左视频 | 性夜a爽黄爽 |