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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - Java設(shè)計(jì)模式之策略模式原理與用法實(shí)例詳解

Java設(shè)計(jì)模式之策略模式原理與用法實(shí)例詳解

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

這篇文章主要介紹了Java設(shè)計(jì)模式之策略模式原理與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java策略模式的概念、原理、定義及使用方法,并總結(jié)了相關(guān)的優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下

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

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

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

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

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

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

下面提供一個(gè)簡單的策略模式的代碼實(shí)例:

1.抽象策略角色:定義一個(gè)接口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.具體策略角色:實(shí)現(xiàn)strategy接口。例子中是實(shí)現(xiàn)加減乘除的運(yùn)算。

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

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

?
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;
  }
  //暴露計(jì)算的接口,供客戶端調(diào)用
  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));
  }
}

總結(jié):

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

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

優(yōu)點(diǎn):

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

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

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

缺點(diǎn):

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

2.會(huì)造成很多的策略類。

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美日毛片| 国产亚洲精品精品国产亚洲综合 | 网红刘婷hd国产高清 | 99国产牛牛视频在线网站 | 日韩久久精品 | 欧美日韩亚洲成人 | 无套日出白浆在线播放 | 色综色天天综合网 | 海绵宝宝第二季全集免费观看 | 日本高清va不卡视频在线观看 | 四虎私人影院 | 日韩毛片在线视频 | 操熟美女又肥又嫩的骚屁股 | 亚洲免费在线观看视频 | 高清一区高清二区视频 | 日本三级成人中文字幕乱码 | 亚洲国产AV无码综合在线 | 王晶经典三级 | a亚洲视频| 日本另类z0zx高清 | 免费观看一区二区 | 精品日本一区二区 | 国产精品夜色视频一级区 | 91精品婷婷国产综合久久8 | 日本女人www | 国产高清日韩 | 70岁多老妇人特黄a级毛片 | 亚洲日韩精品欧美一区二区一 | 欧美日韩国产精品综合 | 亚洲国产成人精品无码区APP | 妹妹你插的我好爽 | 久久久乱码精品亚洲日韩 | 成人曼画| 国产香蕉久久 | 男人狂擦女人的下面视频 | 国产精品福利一区二区亚瑟 | 欧美日韩成人在线 | 四虎最新永久在线精品免费 | 亚洲国产麻豆 | 激情亚洲 | 特黄a大片免费视频 |