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

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

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

前言

策略模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換,且算法的變換不會影響使用算法的客戶。

在項目開發(fā)中,我們經(jīng)常要根據(jù)不同的場景,采取不同的措施,也就是不同的策略。假設(shè)我們需要對a、b這兩個整數(shù)進(jìn)行計算,根據(jù)條件的不同,需要執(zhí)行不同的計算方式。我們可以把所有的操作都封裝在同一個函數(shù)中,然后根據(jù)if ... else ...的形式來調(diào)用不同的計算方式,這種方式稱為硬編碼。

在實際應(yīng)用中,隨著功能和體驗的不斷增長,我們需要經(jīng)常添加/修改策略,進(jìn)而需要不斷修改已有代碼,這不僅會讓這個函數(shù)越來越難以維護(hù),還會因為修改帶來一些Bug。因此,為了解耦,我們需要使用策略模式,定義一些獨(dú)立的類來封裝不同的算法,每一個類封裝一個具體的算法。

示例代碼

策略模式的重點(diǎn)在于策略的設(shè)定,以及普通類Operator和策略CalStrategy的對接。通過更換實現(xiàn)同一接口的不同策略類。降低了Operator的維護(hù)成本,解耦算法實現(xiàn)。

Go

strategy.go

package strategy  
  
// CalStrategy 是一個策略類  
type CalStrategy interface {  
    do(int, int) int  
}  
  
// Add 為加法策略  
type Add struct{}  
  
func (*Add) do(a, b int) int {  
    return a + b  
}  
  
// Reduce 為減法策略  
type Reduce struct{}  
  
func (*Reduce) do(a, b int) int {  
    return a - b  
}  
  
// Operator 是具體的策略執(zhí)行者  
type Operator struct {  
    strategy CalStrategy  
}  
  
// 設(shè)置策略  
func (o *Operator) setStrategy(strategy CalStrategy) {  
    o.strategy = strategy  
}  
  
// 調(diào)用策略中的方法  
func (o *Operator) calc(a, b int) int {  
    return o.strategy.do(a, b)  
}

單元測試文章來源地址http://www.zghlxwxcb.cn/news/detail-825072.html

package strategy  
  
import "testing"  
  
func TestStrategy(t *testing.T) {  
    operator := Operator{}  
    operator.setStrategy(&Add{})  
    if operator.calc(1, 2) != 3 {  
       t.Fatal("Add strategy error")  
    }  
  
    operator.setStrategy(&Reduce{})  
    if operator.calc(2, 1) != 1 {  
       t.Fatal("Reduce strategy error")  
    }  
}

Python

from abc import ABC, abstractmethod


class CalStrategy(ABC):
    """策略類
    """
    @abstractmethod
    def do(self, a: int, b: int) -> int:
        pass


class Add(CalStrategy):
    """加法策略
    """
    def do(self, a: int, b: int) -> int:
        return a + b


class Reduce(CalStrategy):
    """減法策略
    """
    def do(self, a: int, b: int) -> int:
        return a - b


class Operator:
    """策略執(zhí)行者
    """
    def __init__(self):
        self.strategy = None

    def set_strategy(self, strategy: CalStrategy):
        """設(shè)置策略
        """
        self.strategy = strategy

    def calc(self, a: int, b: int) -> int:
        """調(diào)用策略中的方法
        """
        return self.strategy.do(a, b)


if __name__ == "__main__":
    operator = Operator()
    operator.set_strategy(Add())
    print(operator.calc(1, 2))

    operator.set_strategy(Reduce())
    print(operator.calc(4, 3))

參考

  • 孔令飛 - 企業(yè)級Go項目開發(fā)實戰(zhàn)

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

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

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

相關(guān)文章

  • 設(shè)計模式(4)--對象行為(9)--策略

    設(shè)計模式(4)--對象行為(9)--策略

    1. 意圖 ? ? 定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。 ? ? 本模式使得算法可獨(dú)立于使用它的客戶而變化。 2. 三種角色 ? ?抽象策略(Strategy)、具體策略(Concrete Strategy)、上下文環(huán)境(Context) 3. 優(yōu)點(diǎn) ? ? 3.1 可重用的相關(guān)算法系列。 ? ? 3.2 一個替代繼

    2024年02月04日
    瀏覽(21)
  • 軟件設(shè)計模式與體系結(jié)構(gòu)-設(shè)計模式-行為型軟件設(shè)計模式-策略模式

    軟件設(shè)計模式與體系結(jié)構(gòu)-設(shè)計模式-行為型軟件設(shè)計模式-策略模式

    策略模式(Strategy Pattern)是一種行為型設(shè)計模式,它定義了一系列算法,并將每個算法封裝在獨(dú)立的類中,使它們可以相互替換。策略模式使得算法可以獨(dú)立于使用它們的客戶端而變化。 下面是一個使用策略模式的簡單代碼示例,以解釋其工作原理: 在上述示例中,策略模

    2024年02月13日
    瀏覽(26)
  • 【設(shè)計模式與范式:行為型】61 | 策略模式(下):如何實現(xiàn)一個支持給不同大小文件排序的小程序?

    上一節(jié)課,我們主要介紹了策略模式的原理和實現(xiàn),以及如何利用策略模式來移除 if-else 或者 switch-case 分支判斷邏輯。今天,我們結(jié)合“給文件排序”這樣一個具體的例子,來詳細(xì)講一講策略模式的設(shè)計意圖和應(yīng)用場景。 除此之外,在今天的講解中,我還會通過一步一步地

    2024年02月10日
    瀏覽(20)
  • Java設(shè)計模式-前言

    Java設(shè)計模式-前言

    ?館長準(zhǔn)備了很多學(xué)習(xí)資料,其中包含 java方面,jvm調(diào)優(yōu),spring / spring boot /spring cloud ,微服務(wù),分布式,前端,js書籍資料,視頻資料,以及各類常用軟件工具,破解工具? 等資源。請關(guān)注“IT技術(shù)館”公眾號,進(jìn)行關(guān)注,館長會每天更新資源和更新技術(shù)文章等。請大家多多關(guān)

    2024年01月21日
    瀏覽(23)
  • 設(shè)計模式行為模式-命令模式

    設(shè)計模式行為模式-命令模式

    命令模式(Command Pattern)是一種行為型設(shè)計模式,用于將請求封裝為對象,從而使你可以使用不同的請求、隊列或者日志請求來參數(shù)化其他對象。這樣可以實現(xiàn)請求的參數(shù)化操作、隊列化和日志化,且能夠支持撤銷操作。 命令模式由以下幾個核心組件組成: 命令(Command)

    2024年02月10日
    瀏覽(29)
  • 設(shè)計模式行為型——命令模式

    設(shè)計模式行為型——命令模式

    目錄 命令模式的定義? ? ? 命令模式的實現(xiàn) 命令模式角色 命令模式類圖 命令模式舉例 命令模式代碼實現(xiàn) 命令模式的特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn) 使用場景 注意事項 ????????命令模式(Command Pattern)是一種數(shù)據(jù)驅(qū)動的設(shè)計模式,它屬于行為型模式。是對命令的封裝,每一個命令都是

    2024年02月14日
    瀏覽(26)
  • 【設(shè)計模式--行為型--命令模式】

    【設(shè)計模式--行為型--命令模式】

    定義 將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。這樣兩者之間通過命令對象進(jìn)行溝通,這樣方便將命令對象進(jìn)行存儲,傳遞,調(diào)用,增加與管理。 結(jié)構(gòu) 抽象命令類(Command)角色:定義命令的接口,聲明執(zhí)行的方法。 具體命令(Concrete Command)

    2024年02月04日
    瀏覽(24)
  • 行為型設(shè)計模式——狀態(tài)模式

    行為型設(shè)計模式——狀態(tài)模式

    狀態(tài)模式是比較簡單的設(shè)計模式,它的主要作用是減少代碼中大量的 if-else 或者 switch-case 等邏輯判斷(俗稱屎山)。它將每個狀態(tài)定義為一個類,而每個狀態(tài)類有自己對應(yīng)的方法,因此當(dāng)需要根據(jù)狀態(tài)執(zhí)行邏輯代碼時不需要寫大量的if-else判斷是哪個狀態(tài)然后執(zhí)行對應(yīng)的邏輯

    2024年02月02日
    瀏覽(30)
  • 設(shè)計模式之行為型模式

    意圖:定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。 觀察者模式包含以下幾個核心角色: 主題(Subject):也稱為被觀察者或可觀察者,它是具有狀態(tài)的對象,并維護(hù)著一個觀察者列表。主題提供了添加

    2024年01月18日
    瀏覽(15)
  • 設(shè)計模式行為型——狀態(tài)模式

    設(shè)計模式行為型——狀態(tài)模式

    ? 目錄 狀態(tài)模式的定義 狀態(tài)模式的實現(xiàn) 狀態(tài)模式角色 狀態(tài)模式類圖 狀態(tài)模式舉例 狀態(tài)模式代碼實現(xiàn) 狀態(tài)模式的特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn) 使用場景 注意事項 實際應(yīng)用 ? ? ? ?在軟件開發(fā)過程中,應(yīng)用程序中的部分對象可能會根據(jù)不同的情況做出不同的行為,把這種對象稱為有狀態(tài)

    2024年02月14日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包