策略模式的應用場景

2021-10-21 01:44:50 字數 2004 閱讀 8390

策略模式的主要目的是將行為具體的演算法或者實現進行分開。如:條條大路通羅馬。採取不同的路線或者出行方式雖然會出現不同的演算法或實現,但是其最終行為都是去往羅馬。其基本實現如下:

// 宣告使用的演算法介面,不同的演算法通過實現此介面。

type transportation inte***ce

type plane struct

func

(u *plane)

use(

)type train struct

func

(u *train)

use(

)type rome struct

func

(r *rome)

gorome

(u transportation)

現在可以假設乙個場景:周一使用飛機,周二使用火車,週三使用地鐵。如果是樸素的實現方式如下:

package main

import

"fmt"

type rome struct

//gorome dayoftheweek:星期幾

func

(r *rome)

gorome

(dayoftheweek string

)else

if dayoftheweek ==

"tuesday"

else

if dayoftheweek ==

"wednesday"

}func

main()

這裡如果需要增加乙個周四使用輪船則需要增加乙個if else。 當這種if else充斥在**中,並且每個if else**塊都很大時,**則會變得很難維護。並且每次增加if else 都會對原有的**造成較大的改動。很顯然違背了"開閉原則(開閉原則:主要目的是為了減少對原有類的修改。因為對原有類的修改往往都需要閱讀大量的上下文**才能進行對應的修改,這種方式會導致系統的維護難度極具上公升。)",所以這裡應該把抽象的行為和具體的實現演算法分開。如下:

package main

import

"fmt"

type transportation inte***ce

type plane struct

func

(u *plane)

use(dayoftheweek string)}

type train struct

func

(u *train)

use(dayoftheweek string)}

type subway struct

func

(u *subway)

use(dayoftheweek string)}

type rome struct

// 此處將不同的交通工具儲存在transportations

func

(r *rome)

addtransportation

(t transportation)

//gorome dayoftheweek:星期幾

func

(r *rome)

gorome

(dayoftheweek string)}

func

main()

對於使用策略模式,當需要增加乙個新增的交通工具以及特定的條件時,只需要新增乙個交通工具並實現transportation即可。之後將其加入到rome中,而無需改動rome的**。

​ 雖然使用策略模式短期內會增大**量,但是這是值得的。正如《a philosophy of software design》這本書中提到的,採取第一種戰術程式設計的方式短期內的複雜度不會上公升。然而隨著時間的流逝,當功能越來越多並且越來越複雜時,在原有的**上進行改動將會越來越困難。從而導致系統的複雜度大幅度增加。

策略模式的使用場景

當程式 現一堆連在一起的if else語句,例如 public void t else if b else if c else 此時對於這一對if else語句,每個條件a,b,c 可能會很複雜,維護起來也很難,尤其後續新增加不同情況的操作,還需要新增加if else,耦合度太高。故此時可以使用策略...

設計模式應用場景

設計模式應用場景 1 command 建立和執行事務 實體上的解耦 時間上的解耦 undo方法 2 active object模式 該模式與command模式結合 實現多執行緒控制的一項古老的技術,為許多任務業系統提供了乙個簡單的多工核心。3 template method 與 strategy 分...

單利模式應用場景

單例模式應用的場景一般發現在以下條件下 1 資源共享的情況下,避免由於資源操作時導致的效能或損耗等。如上述中的日誌檔案。2 控制資源的情況下,方便資源之間的互相通訊。如執行緒池等。python 1 python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成 pyc 檔案,當第二次匯入時,...