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

【設(shè)計(jì)模式】-策略模式:優(yōu)雅處理?xiàng)l件邏輯

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

Java 策略模式之優(yōu)雅處理?xiàng)l件邏輯

前言

在軟件開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到根據(jù)不同的條件執(zhí)行不同邏輯的情況。這時(shí),策略模式是一種常用的設(shè)計(jì)模式,能夠使代碼結(jié)構(gòu)清晰、易于擴(kuò)展和維護(hù)。

本文將詳細(xì)介紹策略模式的概念及其在Java中的應(yīng)用,通過(guò)代碼示例演示如何使用策略模式來(lái)處理?xiàng)l件邏輯,以達(dá)到代碼設(shè)計(jì)的靈活性和可維護(hù)性。

什么是策略模式?

策略模式(Strategy Pattern)是一種行為型設(shè)計(jì)模式,它允許在運(yùn)行時(shí)根據(jù)不同的條件選擇不同的算法或行為。它將每個(gè)條件分支的邏輯封裝在一個(gè)獨(dú)立的類(lèi)中,使得它們可以獨(dú)立變化,互不影響。

策略模式使用了面向?qū)ο?/strong>的封裝、繼承和多態(tài)等特性,使得代碼具備高內(nèi)聚、低耦合的特點(diǎn)。通過(guò)將條件邏輯的變化封裝到策略類(lèi)中,不僅可以簡(jiǎn)化代碼的編寫(xiě),還能提高代碼的可維護(hù)性、可擴(kuò)展性和可重用性。

實(shí)現(xiàn)原理

策略模式實(shí)現(xiàn)原理主要涉及以下幾個(gè)部分:

  1. 策略接口(Strategy Interface):定義了各個(gè)策略類(lèi)必須實(shí)現(xiàn)的方法。這個(gè)接口將算法邏輯進(jìn)行抽象,并定義了統(tǒng)一的方法或行為。

  2. 策略類(lèi)(Concrete Strategies)實(shí)現(xiàn)(implements)策略接口,并封裝了具體的算法邏輯。每個(gè)具體策略類(lèi)都是獨(dú)立的且具體邏輯互相隔離,分別實(shí)現(xiàn)不同的算法。

  3. 上下文類(lèi)(Context):包含一個(gè)策略接口成員變量,并在運(yùn)行時(shí)根據(jù)需要使用具體的策略類(lèi)。上下文類(lèi)通過(guò)策略接口與具體的策略類(lèi)進(jìn)行交互,并調(diào)用策略類(lèi)中定義的算法。上下文主要用于決定使用哪個(gè)策略類(lèi)

使用策略模式的關(guān)鍵在于上下文類(lèi)與策略類(lèi)之間的耦合解耦。上下文類(lèi)通過(guò)策略接口具體的策略類(lèi)進(jìn)行交互,而不是直接依賴于具體的策略類(lèi)。這樣,在需要更換或增加新的策略時(shí),只需要修改上下文類(lèi)的代碼,而不需要修改客戶端的代碼,從而實(shí)現(xiàn)了代碼的靈活性和可擴(kuò)展性。

示例:支付系統(tǒng)中的策略模式

假設(shè)我們正在開(kāi)發(fā)一個(gè)支付系統(tǒng),其中有多種支付方式,包括現(xiàn)金支付、信用卡支付和支付寶支付。不同的支付方式計(jì)算價(jià)格的邏輯可能有所不同,我們可以使用策略模式來(lái)實(shí)現(xiàn)這一需求。

首先,我們定義一個(gè)策略接口PaymentStrategy,它聲明了一個(gè)名為calculatePrice的方法用于計(jì)算價(jià)格:

1.定義策略接口

// 定義策略接口
public interface PaymentStrategy {
    double calculatePrice(double price);
}

2.定義策略類(lèi),實(shí)現(xiàn)PaymentStrategy接口的方法:

// 策略類(lèi):使用現(xiàn)金支付
public class CashPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 這里是現(xiàn)金支付的價(jià)格計(jì)算邏輯
        return price * 0.9; // 打9折
    }
}

// 策略類(lèi):使用信用卡支付
public class CreditCardPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 這里是信用卡支付的價(jià)格計(jì)算邏輯
        return price * 1.2; // 加收20%手續(xù)費(fèi)
    }
}

// 策略類(lèi):使用支付寶支付
public class AlipayPaymentStrategy implements PaymentStrategy {
    @Override
    public double calculatePrice(double price) {
        // 這里是支付寶支付的價(jià)格計(jì)算邏輯
        return price * 0.95; // 打95折
    }
}

3.接下來(lái),我們創(chuàng)建一個(gè)上下文類(lèi)PaymentContext,用于將不同的策略類(lèi)進(jìn)行封裝,外部調(diào)用時(shí)只需關(guān)注該上下文類(lèi):

// 上下文類(lèi)
public class PaymentContext {
    private PaymentStrategy paymentStrategy;
    
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    
    public double calculate(double price) {
        return paymentStrategy.calculatePrice(price);
    }
}

4.最后,我們可以通過(guò)實(shí)例化不同的策略類(lèi)對(duì)象,并將其傳入PaymentContext中,然后調(diào)用calculate方法進(jìn)行價(jià)格計(jì)算:

public class Main {
    public static void main(String[] args) {
        PaymentStrategy cashPayment = new CashPaymentStrategy();

        PaymentContext cashPaymentContext = new PaymentContext(cashPayment);
        double cashPrice = cashPaymentContext.calculate(100.0);
        System.out.println("現(xiàn)金支付價(jià)格:" + cashPrice);

        PaymentStrategy creditCardPayment = new CreditCardPaymentStrategy();
        PaymentContext creditCardPaymentContext = new PaymentContext(creditCardPayment);
        double creditCardPrice = creditCardPaymentContext.calculate(100.0);
        System.out.println("信用卡支付價(jià)格:" + creditCardPrice);

        PaymentStrategy alipayPayment = new AlipayPaymentStrategy();
        PaymentContext alipayPaymentContext = new PaymentContext(alipayPayment);
        double alipayPrice = alipayPaymentContext.calculate(100.0);
        System.out.println("支付寶支付價(jià)格:" + alipayPrice);
    }
}

運(yùn)行上述代碼可以得到如下輸出:

現(xiàn)金支付價(jià)格:90.0
信用卡支付價(jià)格:120.0
支付寶支付價(jià)格:95.0

在以上示例中,我們定義了三種不同的支付策略:現(xiàn)金支付、信用卡支付支付寶支付,它們分別實(shí)現(xiàn)了PaymentStrategy接口并實(shí)現(xiàn)了自己的價(jià)格計(jì)算邏輯。通過(guò)創(chuàng)建PaymentContext對(duì)象并傳入不同的支付策略,我們可以調(diào)用calculate方法獲得相應(yīng)的價(jià)格結(jié)果。

總結(jié)

????????通過(guò)策略模式,我們可以優(yōu)雅地處理?xiàng)l件邏輯,將各個(gè)條件分支的邏輯封裝到獨(dú)立的策略類(lèi)中,使得代碼結(jié)構(gòu)清晰、易于擴(kuò)展和維護(hù)。

????????策略模式適用于需求中存在多個(gè)條件分支,并且這些條件分支的邏輯會(huì)隨時(shí)變化的情況。使用策略模式能夠提高代碼的可讀性和可維護(hù)性,同時(shí)也符合面向?qū)ο笤O(shè)計(jì)原則中的開(kāi)閉原則。

????????在實(shí)際開(kāi)發(fā)中,我們可以根據(jù)具體需求靈活運(yùn)用策略模式,幫助我們構(gòu)建出高質(zhì)量、易于維護(hù)的代碼。

參考資料:

  • 《Head First 設(shè)計(jì)模式》文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-637401.html

到了這里,關(guān)于【設(shè)計(jì)模式】-策略模式:優(yōu)雅處理?xiàng)l件邏輯的文章就介紹完了。如果您還想了解更多內(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)文章

  • [設(shè)計(jì)模式]行為型模式-策略模式

    策略模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以互相替換,且算法的變換不會(huì)影響使用算法的客戶。 在項(xiàng)目開(kāi)發(fā)中,我們經(jīng)常要根據(jù)不同的場(chǎng)景,采取不同的措施,也就是不同的策略。假設(shè)我們需要對(duì)a、b這兩個(gè)整數(shù)進(jìn)行計(jì)算,根據(jù)條件的不同,需要執(zhí)行不

    2024年02月19日
    瀏覽(32)
  • 設(shè)計(jì)模式—策略模式

    設(shè)計(jì)模式—策略模式

    目錄 一、定義 二、特點(diǎn) 三、優(yōu)點(diǎn) 四、缺點(diǎn) 五、實(shí)例 六.涉及到的知識(shí)點(diǎn) 1、一個(gè)類(lèi)里面有哪些東西? 2、類(lèi)和實(shí)例 什么是類(lèi)? 什么是實(shí)例? 什么是實(shí)例化? 3、字段和屬性 什么是字段? 屬性是什么? 屬性怎么用呢? 屬性有什么作用? 靜態(tài)屬性是什么? 屬性和字段的公有

    2024年02月10日
    瀏覽(23)
  • 【設(shè)計(jì)模式】4、策略模式

    【設(shè)計(jì)模式】4、策略模式

    策略模式是一種行為設(shè)計(jì)模式,它能定義一系列算法,把每種算法分別放入獨(dú)立的類(lèi)中,以是算法的對(duì)象能相互替換。 一天, 你打算為游客們創(chuàng)建一款導(dǎo)游程序。 該程序的核心功能是提供美觀的地圖, 以幫助用戶在任何城市中快速定位。 用戶期待的程序新功能是自動(dòng)路線

    2024年02月20日
    瀏覽(23)
  • 設(shè)計(jì)模式-策略模式

    策略模式是一種行為型設(shè)計(jì)模式,它允許在運(yùn)行時(shí)動(dòng)態(tài)改變對(duì)象的行為。在策略模式中,算法被封裝在獨(dú)立的策略類(lèi)中,使得它們可以互換使用。下面是一個(gè)簡(jiǎn)單的例子: 假設(shè)我們有一個(gè)計(jì)算稅收的系統(tǒng),現(xiàn)在需要計(jì)算不同類(lèi)型的商品的稅收,例如書(shū)籍、食品和服裝。每種商

    2024年02月15日
    瀏覽(25)
  • 設(shè)計(jì)模式:策略模式

    策略模式(Strategy Pattern)是一種行為型設(shè)計(jì)模式,它允許在運(yùn)行時(shí)根據(jù)不同的情況選擇不同的算法或行為。策略模式通過(guò)將算法封裝成獨(dú)立的策略類(lèi),使得它們可以互相替換,而不影響客戶端的使用。 在策略模式中,有三個(gè)核心組件: 策略接口(Strategy Interface):定義了策

    2024年02月07日
    瀏覽(23)
  • 【設(shè)計(jì)模式】 策略模式

    策略模式 (Strategy Pattern)是一種行為型設(shè)計(jì)模式,它定義了一系列算法,將每個(gè)算法封裝起來(lái),使它們可以相互替換,讓客戶端代碼和算法的具體實(shí)現(xiàn)解耦。這樣,客戶端可以根據(jù)不同的需求選擇不同的算法,而無(wú)需修改原有的代碼。 靈活性增強(qiáng) :策略模式使得算法獨(dú)立于

    2024年02月14日
    瀏覽(37)
  • 設(shè)計(jì)模式之策略模式

    策略設(shè)計(jì)模式(Strategy Pattern)是一種行為設(shè)計(jì)模式,它允許在運(yùn)行時(shí)選擇算法的行為。策略模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以互相替換。這種模式使算法的變化獨(dú)立于使用算法的客戶端。 概念 在策略模式中,有以下幾個(gè)關(guān)鍵組成部分: 策略接口(

    2024年01月23日
    瀏覽(50)
  • 設(shè)計(jì)模式--策略模式

    設(shè)計(jì)模式--策略模式

    目錄 一.場(chǎng)景 1.1場(chǎng)景 2.2 何時(shí)使用 ?2.3個(gè)人理解 二. 業(yè)務(wù)場(chǎng)景練習(xí) ?2.1業(yè)務(wù): 2.2具體實(shí)現(xiàn) 2.3思路? ?三.總結(jié) 3.1策略模式的特點(diǎn): ?3.2策略模式優(yōu)點(diǎn) 3.3策略模式缺點(diǎn) 1.1場(chǎng)景 許多相關(guān)的類(lèi)僅僅是行為有異,也就是說(shuō)業(yè)務(wù)代碼需要根據(jù)場(chǎng)景不同,切換不同的實(shí)現(xiàn)邏輯 一個(gè)類(lèi)定義了

    2024年02月13日
    瀏覽(26)
  • 設(shè)計(jì)模式——策略模式

    設(shè)計(jì)模式——策略模式

    定義: 該模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。策略模式屬于對(duì)象行為模式,它通過(guò)對(duì)算法進(jìn)行封裝,把便用算法的責(zé)任和算法的實(shí)現(xiàn)分割開(kāi)來(lái),并委派給不算法進(jìn)象行管理。 主要角色如下: 示例: 假定現(xiàn)在需要

    2024年02月22日
    瀏覽(20)
  • 《設(shè)計(jì)模式》策略模式

    《設(shè)計(jì)模式》策略模式

    定義 : 又叫作 政策模式,將定義的一系列算法封裝起來(lái),使得它們之間可以互相替換,從而讓算法的變化不影響到使用算法的用戶 。 屬于 行為型 模式。 策略模式的組成角色 : 環(huán)境類(lèi)(Context) : 環(huán)境類(lèi)是使用算法的角色 ,用來(lái)操作策略的上下文環(huán)境,屏蔽高層模塊(客戶

    2024年02月01日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包