策略模式用於演算法的自由切換和擴充套件,分離演算法的定義與實現。
android中策略模式的應用有webview設計,animation中的interpolator設計…
例如電商應用中的商品**計算
fun main(args: array)
inte***ce pricestrategy
class normalpricestrategy : pricestrategy
}class goldpricestrategy : pricestrategy
}class diamondpricestrategy : pricestrategy
}/**
* 上下文環境,定義了 pricestrategy 介面引用,在建立 pricestrategycontext 例項時傳入具體的策略類,
* 具體策略類呼叫策略方法。客戶端建立 pricestrategycontext 物件負責呼叫策略方法。
*/class pricestrategycontext()
fun setstrategy(strategy: pricestrategy?): pricestrategycontext
//持有演算法方法
fun strategymethod(price: double)
}
策略模式中的上下文環境 pricestrategycontext 的職責是隔離客戶端與策略類的耦合,無須關注具體的策略行為。上面示例中, pricestrategycontext 的作用只是負責排程策略類的執行並獲取結果,並沒有完全起到隔離客戶端與策略類的作用。
通過簡單工廠模式將具體策略物件的建立與呼叫方進行隔離,也可通過策略列舉或者策略類的配置注入,將pricestrategycontext中的具體策略類融合在一起,簡化**。
##簡單工廠
abstract class pricestrategyfactory catch (e: exception)
return strategy}}
}
##列舉
fun main(args: array)
enum class pricestrategy(var type: string)
},gold("gold")
},diamond("diamond")
};fun settype(type: string): pricestrategy
abstract fun calculate(price: double): double
}
##高階函式抽象演算法
策略類僅僅是針對演算法行為的一種抽象,kotlin 中可以使用高階函式替代。
fun main(args: array)
// 策略用val宣告成lambda表示式
val normalpricestrategy =
val goldpricestrategy =
val diamondpricestrategy =
class pricestrategycontext(private val price: double, private val pricestrategy: (double) -> double)
策略模式需要不停的在各個演算法間切換,造成很多邏輯判斷,我們可以配合使用一些其他的模式去消除。 設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...