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

軟件設(shè)計模式系列之二十三——策略模式

這篇具有很好參考價值的文章主要介紹了軟件設(shè)計模式系列之二十三——策略模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 模式的定義

策略模式(Strategy Pattern)是一種行為型設(shè)計模式,它允許在運行時動態(tài)選擇算法的行為。這意味著你可以定義一系列算法,將它們封裝成獨立的策略對象,然后根據(jù)需要在不修改客戶端代碼的情況下切換這些算法。策略模式有助于解決問題領(lǐng)域中不同行為的變化和擴展,同時保持代碼的靈活性和可維護性。

2 舉例說明

策略模式在日常生活中有許多應(yīng)用,以下是幾個比較符合策略模式且為大家所熟知的例子:

導(dǎo)航應(yīng)用的路線選擇:導(dǎo)航應(yīng)用根據(jù)用戶的輸入和當(dāng)前交通情況,選擇不同的導(dǎo)航策略,如最短路徑、避開擁堵、步行導(dǎo)航等。用戶可以根據(jù)需要選擇不同的導(dǎo)航策略,類似于策略模式中的選擇不同算法。
軟件設(shè)計模式系列之二十三——策略模式

手機相機的拍攝模式:手機相機應(yīng)用通常具有多種拍攝模式,如普通拍照、全景模式、夜間模式、慢動作模式等。用戶可以根據(jù)拍攝需求選擇不同的拍攝模式,每種模式對應(yīng)不同的拍攝策略。

餐廳菜單的點餐方式:在餐廳菜單中,顧客可以選擇不同的點餐方式,如套餐、單點、外賣等。每種點餐方式對應(yīng)不同的計費策略和服務(wù)流程。

交通信號燈的控制:交通信號燈會根據(jù)不同的時間段和交通流量采用不同的信號控制策略,如紅燈、綠燈、黃燈。這些策略會在不同的情況下切換,以保障道路交通的安全和流暢。

這些例子中,策略模式的思想都可以看到:根據(jù)不同的需求或條件,選擇不同的策略來實現(xiàn)特定的行為或功能,而無需改變核心系統(tǒng)。這種動態(tài)選擇和切換策略的能力在日常生活中隨處可見,幫助我們更好地適應(yīng)不同的情境和需求。

3 結(jié)構(gòu)

策略模式通常包含以下角色:
軟件設(shè)計模式系列之二十三——策略模式

Context(上下文):上下文類負(fù)責(zé)維護對策略對象的引用,并在運行時切換策略。上下文類通常具有一個方法,用于執(zhí)行當(dāng)前策略。

Strategy(策略):策略是一個接口或抽象類,定義了一組算法的共同接口。具體的策略類實現(xiàn)這個接口,提供了不同的算法實現(xiàn)。

ConcreteStrategy(具體策略):具體策略類實現(xiàn)了策略接口,提供了特定算法的實現(xiàn)。

策略模式結(jié)構(gòu)

4 實現(xiàn)步驟

實現(xiàn)策略模式通常包括以下步驟:

定義策略接口:創(chuàng)建一個策略接口或抽象類,定義算法的方法。

創(chuàng)建具體策略類:為每個算法創(chuàng)建具體的策略類,這些類應(yīng)該實現(xiàn)策略接口,并提供自己的算法實現(xiàn)。

創(chuàng)建上下文類:上下文類應(yīng)該包含一個策略對象的引用,并提供方法來設(shè)置和執(zhí)行策略。

在客戶端代碼中使用:在客戶端代碼中創(chuàng)建上下文對象,并根據(jù)需要設(shè)置不同的策略。

5 代碼實現(xiàn)

讓我們通過Java代碼來演示策略模式的實現(xiàn)。

// Step 1: 定義策略接口
interface DiscountStrategy {
    double applyDiscount(double amount);
}

// Step 2: 創(chuàng)建具體策略類
class PercentageDiscountStrategy implements DiscountStrategy {
    private double percentage;

    public PercentageDiscountStrategy(double percentage) {
        this.percentage = percentage;
    }

    @Override
    public double applyDiscount(double amount) {
        return amount - (amount * percentage / 100);
    }
}

class FixedAmountDiscountStrategy implements DiscountStrategy {
    private double discountAmount;

    public FixedAmountDiscountStrategy(double discountAmount) {
        this.discountAmount = discountAmount;
    }

    @Override
    public double applyDiscount(double amount) {
        return amount - discountAmount;
    }
}

// Step 3: 創(chuàng)建上下文類
class ShoppingCart {
    private DiscountStrategy discountStrategy;

    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    public double checkout(double totalAmount) {
        if (discountStrategy != null) {
            return discountStrategy.applyDiscount(totalAmount);
        }
        return totalAmount;
    }
}

// Step 4: 在客戶端代碼中使用
public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        // 使用百分比折扣策略
        cart.setDiscountStrategy(new PercentageDiscountStrategy(10));
        double discountedTotal = cart.checkout(100.0);
        System.out.println("Discounted Total: " + discountedTotal);

        // 使用固定金額折扣策略
        cart.setDiscountStrategy(new FixedAmountDiscountStrategy(20));
        discountedTotal = cart.checkout(100.0);
        System.out.println("Discounted Total: " + discountedTotal);
    }
}

6 典型應(yīng)用場景

策略模式在許多不同的應(yīng)用場景中都有廣泛的應(yīng)用。以下是一些典型的策略模式應(yīng)用場景以及簡要說明:

支付系統(tǒng):支付系統(tǒng)通常需要處理多種支付方式,如信用卡、支付寶、微信支付等。策略模式可以用來實現(xiàn)每種支付方式的處理策略,使系統(tǒng)能夠根據(jù)用戶選擇的支付方式執(zhí)行不同的支付邏輯。
軟件設(shè)計模式系列之二十三——策略模式

電商平臺的促銷策略:電商平臺常常會推出不同的促銷活動,如打折、滿減、贈品等。策略模式可以用來實現(xiàn)這些促銷策略,使系統(tǒng)能夠根據(jù)當(dāng)前活動動態(tài)地計算商品價格。

文本編輯器的文本格式化:文本編輯器可以提供多種文本格式化選項,如加粗、斜體、下劃線等。策略模式可以用來實現(xiàn)不同的文本格式化策略,使用戶能夠選擇不同的格式化效果。

游戲開發(fā)中的敵人行為:在游戲開發(fā)中,不同類型的敵人可能具有不同的行為,如追逐玩家、攻擊玩家、躲避玩家等。策略模式可以用來定義不同的敵人行為策略,使游戲引擎能夠根據(jù)敵人的類型選擇正確的行為策略。

數(shù)據(jù)排序:在數(shù)據(jù)處理中,可能需要根據(jù)不同的排序算法對數(shù)據(jù)進行排序,如快速排序、冒泡排序、插入排序等。策略模式可以用來實現(xiàn)這些不同的排序策略,使系統(tǒng)能夠根據(jù)數(shù)據(jù)量和性質(zhì)選擇合適的排序算法。

這些例子中,策略模式都用于動態(tài)選擇和切換不同的算法或行為,以滿足不同的需求或情境。這種靈活性和可擴展性使得策略模式成為面向?qū)ο笤O(shè)計中的重要工具,能夠提高代碼的可維護性和可讀性。

7 優(yōu)缺點

優(yōu)點:

策略模式使代碼更具靈活性,易于擴展和維護。添加新的策略類不會影響現(xiàn)有代碼。
策略模式將算法封裝在獨立的策略類中,使代碼更具可讀性和可維護性。
客戶端代碼可以根據(jù)需要在運行時切換策略,無需修改現(xiàn)有代碼。

缺點:

如果策略類數(shù)量過多,可能會導(dǎo)致類的數(shù)量增加,增加維護成本。
客戶端需要了解不同策略的存在,可能會增加復(fù)雜性。

8 類似模式

與策略模式類似的模式包括以下幾種:

狀態(tài)模式(State Pattern):

狀態(tài)模式和策略模式都屬于行為型設(shè)計模式,它們都關(guān)注對象的行為,但它們的重點不同。策略模式側(cè)重于在一組算法中選擇一個,而狀態(tài)模式側(cè)重于在對象的狀態(tài)改變時改變其行為。在狀態(tài)模式中,對象的行為取決于它的狀態(tài),而不是通過外部切換不同的策略類。

命令模式(Command Pattern):

策略模式和命令模式都允許將不同的行為封裝成對象,但它們的目的和用途有所不同。策略模式用于在運行時選擇不同的算法,而命令模式用于封裝請求以及請求的參數(shù),允許以更靈活的方式進行操作。

模板方法模式(Template Method Pattern):

模板方法模式和策略模式都是用于定義一組算法,但它們的關(guān)注點不同。模板方法模式定義了一個算法的骨架,具體子類可以實現(xiàn)其中的某些步驟,而策略模式將不同的算法封裝成獨立的策略對象,并允許在運行時選擇不同的策略。

這些模式之間的聯(lián)系在于它們都涉及到將不同的行為封裝成對象,從而提高了代碼的可維護性和靈活性。然而,它們各自解決不同類型的問題,因此在選擇模式時需要根據(jù)具體情況來決定使用哪種模式。策略模式更適用于需要在一組算法中進行動態(tài)選擇的情況,而其他模式則解決了不同的設(shè)計問題,例如狀態(tài)管理、請求封裝等。根據(jù)問題的性質(zhì),可以選擇合適的模式來實現(xiàn)所需的功能。

9 小結(jié)

策略模式是一種強大的設(shè)計模式,允許在運行時選擇不同的算法實現(xiàn),以處理不同的行為需求。通過將算法封裝在獨立的策略類中,策略模式提高了代碼的可維護性和可擴展性。在面臨多種行為選擇的情況下,策略模式是一個有力的工具,可以使代碼更加靈活和可讀。但是,它需要在客戶端了解不同策略的情況下使用,因此需要謹(jǐn)慎設(shè)計。總之,策略模式是面向?qū)ο笤O(shè)計中的一個重要概念,值得深入學(xué)習(xí)和應(yīng)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-710384.html

到了這里,關(guān)于軟件設(shè)計模式系列之二十三——策略模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 軟件設(shè)計模式系列之二十五——訪問者模式

    軟件設(shè)計模式系列之二十五——訪問者模式

    訪問者模式(Visitor Pattern)是一種強大的行為型設(shè)計模式,它允許你在不改變被訪問對象的類的前提下,定義新的操作和行為。本文將詳細(xì)介紹訪問者模式,包括其定義、舉例說明、結(jié)構(gòu)、實現(xiàn)步驟、Java代碼實現(xiàn)、典型應(yīng)用場景、優(yōu)缺點、類似模式以及最后的小結(jié)。 訪問者

    2024年02月08日
    瀏覽(32)
  • 【中級軟件設(shè)計師】—(針對上午題)二十三種設(shè)計模式(三十九)

    【中級軟件設(shè)計師】—(針對上午題)二十三種設(shè)計模式(三十九)

    簡單工廠模式代碼實現(xiàn)如下: ?? 意圖要背 工廠方法代碼實現(xiàn)如下: 抽象工廠模式代碼如下: 生成器模式代碼如下: 原型模式代碼實現(xiàn)如下: 單例模式代碼如下: 橋接模式代碼實現(xiàn)如下: 組合模式添加和刪除代碼實現(xiàn): 裝飾器模式代碼實現(xiàn): 外觀模式代碼實現(xiàn): 代理模

    2024年02月07日
    瀏覽(36)
  • 軟件設(shè)計模式系列之十三——享元模式

    軟件設(shè)計模式系列之十三——享元模式

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計模式,它旨在減少內(nèi)存占用或計算開銷,通過共享大量細(xì)粒度對象來提高系統(tǒng)的性能。這種模式適用于存在大量相似對象實例,但它們的狀態(tài)可以外部化(extrinsic),并且可以在多個對象之間共享的情況。 為了更好地理解享元模式

    2024年02月08日
    瀏覽(25)
  • 軟考高級系統(tǒng)架構(gòu)設(shè)計師系列論文八十三:論軟件設(shè)計模式的應(yīng)用

    軟考高級系統(tǒng)架構(gòu)設(shè)計師系列之:面向構(gòu)件的軟件設(shè)計,構(gòu)件平臺與典型架構(gòu)

    2024年02月11日
    瀏覽(165)
  • 二十三種設(shè)計模式:工廠模式

    工廠模式是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的最佳方式,而無需暴露對象的創(chuàng)建邏輯。工廠模式通過使用工廠方法來解決這個問題,該方法將對象的創(chuàng)建委托給子類來處理。 在工廠模式中,我們定義一個抽象工廠類,它包含一個抽象的工廠方法,該方法返回一個

    2024年02月07日
    瀏覽(23)
  • 二十三種設(shè)計模式第十三篇--享元模式

    二十三種設(shè)計模式第十三篇--享元模式

    享元模式,主要就是一種池化方案,主要用于創(chuàng)建對象的數(shù)量,以減少內(nèi)存占用和提高性能。這種類型的設(shè)計模式屬于 結(jié)構(gòu)型模式 ,它提供了減少對象數(shù)量從而改善應(yīng)用所需的對象結(jié)構(gòu)的方式。 享元模式,嘗試重用現(xiàn)有的同類對象,如果未找到相同匹配的對象,那么就去創(chuàng)

    2024年02月12日
    瀏覽(17)
  • 二十三種設(shè)計模式第二十篇--備忘錄模式

    二十三種設(shè)計模式第二十篇--備忘錄模式

    備忘錄模式,備忘錄模式屬于行為型模式。它允許在不破壞封裝的情況下捕獲和恢復(fù)對象的內(nèi)部狀態(tài)。 保存一個對象的某個狀態(tài),以便在適當(dāng)?shù)臅r候恢復(fù)對象,該模式通過創(chuàng)建一個備忘錄對象來保存原始對象的狀態(tài),并將其存儲在一個負(fù)責(zé)管理備忘錄的負(fù)責(zé)人對象中。 備忘

    2024年02月14日
    瀏覽(23)
  • 二十三種設(shè)計模式(待更)

    二十三種設(shè)計模式(待更)

    資料來源于老師講解以及大佬的設(shè)計模式倉庫 zhengqingya 將對象和類按某種布局組成更大的結(jié)構(gòu),并同時保持結(jié)構(gòu)的靈活和?效。 1.適配器 適配器就是將原先無法直接使用的某個接口或者類通過適配器模式轉(zhuǎn)換為可以使用的接口或者類。將一個類的接口轉(zhuǎn)換成客戶希望的另外

    2024年02月08日
    瀏覽(18)
  • 設(shè)計模式(二十三)訪問者

    設(shè)計模式(二十三)訪問者

    表示一個作用于某對象結(jié)構(gòu)中的各個元素的操作。訪問者模式讓你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式是一種對象行為型模式 訪問者模式是一種較為復(fù)雜的行為型模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素

    2024年02月19日
    瀏覽(21)
  • 設(shè)計模式(二十三)——解釋器模式(Interpreter )

    設(shè)計模式(二十三)——解釋器模式(Interpreter )

    解釋器模式(Interpreter ) 實現(xiàn)了一個表達式接口,該接口解釋一個特定的上下文 應(yīng)用 編譯器,正則表達式,SQL解析 實現(xiàn) 實現(xiàn)一個一位數(shù)的加法運算

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包