真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到義縣網(wǎng)站設(shè)計(jì)與義縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋義縣地區(qū)。

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

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

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

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

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

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

1.抽象策略角色:定義一個(gè)接口Strategy。

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)算。

package com.test;
/**
 * 策略模式具體策略類(lèi)
 * 實(shí)現(xiàn)加法運(yùn)算
 * @author zhouwen
 *
 */
public class AddStrategy implements Strategy {
  @Override
  public int calculate(int a, int b) {
    return a + b;
  }
}

package com.test;
/**
 * 策略模式具體策略類(lèi)
 * 實(shí)現(xiàn)減法運(yùn)算
 * @author zhouwen
 *
 */
public class SubtractStrategy implements Strategy {
  @Override
  public int calculate(int a, int b) {
    return a - b;
  }
}

package com.test;
/**
 * 策略模式具體策略類(lèi)
 * 實(shí)現(xiàn)乘法運(yùn)算
 * @author zhouwen
 *
 */
public class MultiplyStragety implements Strategy {
  @Override
  public int calculate(int a, int b) {
    return a * b;
  }
}

package com.test;
/**
 * 策略模式具體策略類(lèi)
 * 實(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ì)算的方法,供客戶(hù)端調(diào)用。

package com.test;
/**
 * 策略模式環(huán)境類(lèi)
 * @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ì)算的接口,供客戶(hù)端調(diào)用
  public int calculate(int a, int b){
    return strategy.calculate(a, b);
  }
}

4.最后編寫(xiě)客戶(hù)端的代碼:

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é):

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

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

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

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

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

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

缺點(diǎn):

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

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

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

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


名稱(chēng)欄目:Java設(shè)計(jì)模式之策略模式原理與用法實(shí)例詳解
標(biāo)題來(lái)源:http://weahome.cn/article/pgdoog.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部