国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java特性之設(shè)計(jì)模式【策略模式】

這篇具有很好參考價(jià)值的文章主要介紹了Java特性之設(shè)計(jì)模式【策略模式】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、策略模式

概述

在策略模式(Strategy Pattern)中,一個(gè)類的行為或其算法可以在運(yùn)行時(shí)更改。這種類型的設(shè)計(jì)模式屬于行為型模式

在策略模式中,我們創(chuàng)建表示各種策略的對(duì)象和一個(gè)行為隨著策略對(duì)象改變而改變的 context 對(duì)象。策略對(duì)象改變 context 對(duì)象的執(zhí)行算法

主要解決:在有多種算法相似的情況下,使用 if…else 所帶來(lái)的復(fù)雜和難以維護(hù)

何時(shí)使用:一個(gè)系統(tǒng)有許多許多類,而區(qū)分它們的只是他們直接的行為

策略模式一般用于各種算法上面

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

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

1、算法可以自由切換

2、避免使用多重條件判斷

3、擴(kuò)展性良好

缺點(diǎn):

1、策略類會(huì)增多

2、所有策略類都需要對(duì)外暴露

1. 各個(gè)角色介紹

1.1 策略類(Strategy

策略是一個(gè)接口,該接口定義若干個(gè)操作標(biāo)識(shí),即定義了若干個(gè)方法

1.2 環(huán)境類 / 策略上下文類(Context)

上下文是依賴于接口的類(是面向策略設(shè)計(jì)的類,如下圖 Context 類),即上下文包含用策略(接口)聲明的變量(如下圖的strategy成員變量)

上下文提供一個(gè)方法(如下圖Context類中的的 executeStrategy() 方法),持有一個(gè)策略類的引用,最終給客戶端調(diào)用。該方法委托策略變量調(diào)用具體策略所實(shí)現(xiàn)的策略接口中的方法(實(shí)現(xiàn)接口的類重寫策略中的方法,來(lái)完成具體功能)

1.3 具體策略類(ConcreteStrategy)

具體策略是實(shí)現(xiàn)策略接口的類(如下圖的ConcreteStrategyA類和ConcreteStrategyB類)。具體策略實(shí)現(xiàn)策略接口所定義的方法,即給出操作標(biāo)識(shí)的具體方法

2. UML圖

java 策略模式,Java特性,策略模式,java,設(shè)計(jì)模式

3. 具體例子和代碼

角色分配

  • Strategy:策略接口
  • OperationAdd:加法策略(實(shí)現(xiàn)策略接口)
  • OperationSubtract:減法策略(實(shí)現(xiàn)策略接口)
  • OperationMultiply:乘法策略(實(shí)現(xiàn)策略接口)
  • OperationDivision:除法策略(實(shí)現(xiàn)策略接口)
  • Context:策略上下文

3.1 策略接口以及實(shí)現(xiàn)類

  • Strategy
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 策略接口
 */
public interface Strategy {

    /**
     * 實(shí)現(xiàn)該接口的方法
     * @param num1  數(shù)值1
     * @param num2  數(shù)值2
     * @return      計(jì)算結(jié)果
     */
    int doOperation(int num1, int num2);
    
}

  • OperationAdd
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 加法策略
 */
public class OperationAdd implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

  • OperationSubtract
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 減法策略
 */
public class OperationSubtract implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}
  • OperationMultiply
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 乘法策略
 */
public class OperationMultiply implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}
  • OperationDivision
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 除法策略
 */
public class OperationDivision implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 / num2;
    }
}

3.2 策略上下文類

  • Context
package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 * @description 策略上下文
 */
public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public Strategy getStrategy() {
        return strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }
}

3.3 測(cè)試主函數(shù)


package com.vinjcent.pattern.strategy;

/**
 * @author vinjcent
 */
public class Main {

    public static void main(String[] args) {
        // 策略上下文
        Context context = new Context(new OperationAdd());
        // 加法策略
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        // 減法策略
        context = new Context(new OperationSubtract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        // 乘法策略
        context = new Context(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));

        // 除法策略
        context = new Context(new OperationDivision());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}


  • 測(cè)試結(jié)果

java 策略模式,Java特性,策略模式,java,設(shè)計(jì)模式

4. 使用場(chǎng)景

  • 如果在一個(gè)系統(tǒng)里面有許多類,它們之間的區(qū)別僅在于它們的行為,那么使用策略模式可以動(dòng)態(tài)地讓一個(gè)對(duì)象在許多行為中選擇一種行為
  • 一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種
  • 如果一個(gè)對(duì)象有很多的行為,如果不用恰當(dāng)?shù)哪J剑@些行為就只好使用多重的條件選擇語(yǔ)句來(lái)實(shí)現(xiàn)

注意事項(xiàng):

如果一個(gè)系統(tǒng)的策略多于四個(gè),就需要考慮使用混合模式,解決策略類膨脹的問(wèn)題

java 策略模式,Java特性,策略模式,java,設(shè)計(jì)模式文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-720297.html

到了這里,關(guān)于Java特性之設(shè)計(jì)模式【策略模式】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java設(shè)計(jì)模式之策略模式詳解

    大家好,我是免費(fèi)搭建查券返利機(jī)器人賺傭金就用微賺淘客系統(tǒng)3.0的小編,也是冬天不穿秋褲,天冷也要風(fēng)度的程序猿!今天,讓我們一同踏入Java設(shè)計(jì)模式之策略模式的世界,探討代碼中的智慧抉擇。 策略模式的核心思想 策略模式是一種行為型設(shè)計(jì)模式,它定義了算法家族

    2024年01月20日
    瀏覽(29)
  • Java設(shè)計(jì)模式——策略

    前言 策略模式是平時(shí)Java開發(fā)中常用的一種,雖然已有很多講解設(shè)計(jì)模式的文章,但是這里還是寫篇文章來(lái)從自己理解的角度講解一下。 我們不妨進(jìn)行場(chǎng)景假設(shè),要對(duì)我們的軟件進(jìn)行授權(quán)管理:在啟動(dòng)我們的軟件之前先要校驗(yàn)是否存在合法的授權(quán),如果授權(quán)不合法則要求用戶

    2024年02月20日
    瀏覽(19)
  • Java設(shè)計(jì)模式之策略(Strategy)模式

    策略(Strategy)設(shè)計(jì)模式定義了一系列算法,將它們封裝起來(lái),并且可以相互替換使用,從而使得算法可以獨(dú)立于使用它的客戶而變化。 策略(Strategy)設(shè)計(jì)模式是一種行為型設(shè)計(jì)模式,它允許在運(yùn)行時(shí)動(dòng)態(tài)地選擇算法。策略模式將算法封裝為算法族,從而可以在運(yùn)行時(shí)根據(jù)

    2024年02月15日
    瀏覽(33)
  • Java設(shè)計(jì)模式—策略模式(Strategy Mode)

    目錄 前言 一、策略模式的簡(jiǎn)介 二、策略模式的概念 三、策略模式的作用 四、策略模式的優(yōu)、缺點(diǎn) 策略模式的優(yōu)點(diǎn): 策略模式的缺點(diǎn): 五、策略模式應(yīng)用場(chǎng)景 六、代碼案例 1)抽象接口類 2)具體的策略類:減 3)具體策略類:打折 4)上下文類 5)客戶端Main代碼測(cè)試 總結(jié)

    2024年02月08日
    瀏覽(33)
  • Java設(shè)計(jì)模式-策略模式-基于Spring實(shí)現(xiàn)

    Java設(shè)計(jì)模式-策略模式-基于Spring實(shí)現(xiàn)

    策略模式是一種行為設(shè)計(jì)模式,它允許在運(yùn)行時(shí)選擇算法的行為。它將算法封裝在 獨(dú)立的策略類 中,使得它們可以相互替換,而不影響客戶端代碼。這種模式通過(guò) 將算法的選擇從客戶端代碼中分離出來(lái) ,提供了更大的靈活性和可維護(hù)性。 在Java中,策略模式的設(shè)計(jì)理念可以

    2024年02月08日
    瀏覽(26)
  • Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    ????????在平時(shí)的開發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容,第一個(gè)是我們 平時(shí)使用的框架 (比如spring、mybatis等),第二個(gè)是我們自己開發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 ????????面試官一般比較關(guān)心的是你在開發(fā)過(guò)程中, 有沒(méi)有使用過(guò)設(shè)計(jì)模式,或者你在簡(jiǎn)歷上寫了關(guān)于設(shè)計(jì)

    2024年02月10日
    瀏覽(29)
  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——策略模式Strategy(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——策略模式Strategy(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    有各種鴨子,比如野鴨、北京鴨、水鴨等。 鴨子有各種行為,比如走路、叫、飛行等。不同鴨子的行為可能略有不同。要求顯示鴨子的信息 不同的鴨子繼承一個(gè)父類Duck,如果是相同的行為就繼承,不同行為就重寫方法 實(shí)現(xiàn) 【鴨子抽象類】 【野鴨】 【北京鴨】 【玩具鴨】

    2024年02月12日
    瀏覽(35)
  • 設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    設(shè)計(jì)模式、Java8新特性實(shí)戰(zhàn) - List<T> 抽象統(tǒng)計(jì)組件

    在日常寫代碼的過(guò)程中,針對(duì)List集合,統(tǒng)計(jì)里面的某個(gè)屬性,是經(jīng)常的事情,針對(duì)List的某個(gè)屬性的統(tǒng)計(jì),我們目前大部分時(shí)候的代碼都是這樣寫,每統(tǒng)計(jì)一個(gè)變量,就要定義一個(gè)值,且要在for循環(huán)增加一行累計(jì)的代碼,比較繁瑣,而且代碼寫出來(lái)不夠優(yōu)雅。 利用頂層抽象的

    2024年02月14日
    瀏覽(28)
  • 【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    策略模式(Strategy Pattern)屬于行為型設(shè)計(jì)模式。將每一個(gè)算法封裝到具有共同接口的獨(dú)立類中,根據(jù)需要來(lái)綁定策略,使得具體實(shí)現(xiàn)和策略解耦。 當(dāng)你想使用對(duì)象中各種不同的算法變體,使用if...else 所帶來(lái)的復(fù)雜和難以維護(hù),可使用策略模式?;蛘弋?dāng)有許多相同類,它們僅

    2024年02月01日
    瀏覽(21)
  • JAVA設(shè)計(jì)模式----原型設(shè)計(jì)模式

    JAVA設(shè)計(jì)模式----原型設(shè)計(jì)模式

    定義 :用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。 類型 :創(chuàng)建類模式 類圖 : 原型模式主要用于對(duì)象的復(fù)制,它的核心是就是類圖中的原型類Prototype。Prototype類需要具備以下兩個(gè)條件: 實(shí)現(xiàn)Cloneable接口。在java語(yǔ)言有一個(gè)Cloneable接口,它的作用只

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包