激情久久久_欧美视频区_成人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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本在线播放一区二区三区 | 欧美精品第1页 | 护士xxxx| 国内精品伊人久久久久网站 | 亚洲午夜精选 | 久久色在线| 国产日韩久久久久69影院 | 天天夜天天操 | 一级国产免费 | 亚洲午夜一区二区三区 | 欧美一级淫片免费视频黄 | 久久艹综合 | 日韩黄在线 | 国产精品成人一区二区三区吃奶 | 成年人黄视频 | 斗罗破苍穹在线观看免费完整观看 | 成人性生活视频 | 国产精品成人一区二区三区电影毛片 | 久久草草影视免费网 | 男人的天堂视频网站 | 国产精品久久久久国产精品三级 | 九九热在线免费观看视频 | 哪里可以看免费的av | 亚洲四播房| 九九热视频免费观看 | a视频网站| 亚洲国产在| 亚洲aⅴ免费在线观看 | 午夜影视一区二区 | 双性精h调教灌尿打屁股的文案 | 一本色道精品久久一区二区三区 | 精品一区久久久 | 欧美四级在线观看 | 92看片淫黄大片欧美看国产片 | 色人阁导航 | 一级免费看片 | 国产欧美在线观看不卡一 | 色网站免费观看 | 日韩视频www | 精品国产91一区二区三区 | 国产一区二区精品在线观看 |