国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

策略模式

2019-11-14 10:22:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Strategy:定義了算法家族,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化,不會(huì)影響到使用算法的客戶(hù)。

abstract class Strategy{    public abstract void AlgorithmInterface();}
class ConcreteStrategyA extends Strategy{    @override    public void AlgorithmInterface(){算法A的實(shí)現(xiàn)}}
class ConcreteStrategyB extends Strategy{    @override    public void AlgorithmInterface(){算法B的實(shí)現(xiàn)}}
class Context{    Strategy strategy;    public Context(Strategy strategy)    {        this.strategy = strategy;    }    /*    也可仿照工廠(chǎng)模式,根據(jù)給定的字符串賦予不同的Strategy對(duì)象。    public Context(String type)    {        switch(type)        {            case "A":                this.strategy = new ConcreteStrategyA();            ......        }    }    */    public void ContextInterface()    {        strategy.AlgorithmIntergace();    }}

class Main{    public static void main(String[] args)    {        Context context = new Context(new ConcreteStrategyA());        context.ContextInterface();    }}

簡(jiǎn)單工廠(chǎng)模式的用法:

CashSuper csuper = CashFactory.createCashAccept(“正常收費(fèi)”);

csuper.GetResult(...);

策略模式與簡(jiǎn)單工廠(chǎng)結(jié)合的用法:

CashContext csuper = new CashContext(“正常收費(fèi)”);

csuper.GetResult(...);

簡(jiǎn)單工廠(chǎng)模式用戶(hù)需要認(rèn)識(shí)兩個(gè)類(lèi);策略模式與簡(jiǎn)單工廠(chǎng)結(jié)合的用法,客戶(hù)端只需認(rèn)識(shí)一個(gè)類(lèi)。

 

策略模式總結(jié):

策略模式是一種定義一系列算法的方法。

從概念上看,所有這些算法完成的都是相同的工作,只是實(shí)現(xiàn)不同,它可以以相同的方式調(diào)用所有的算法,減少了各種算法類(lèi)與使用算法類(lèi)之間的耦合。

策略模式的Strategy類(lèi)層次為Context定義了一系列的可供重用的算法或行為。

繼承有助于析取出這些算法中的公共功能。

策略模式簡(jiǎn)化了單元測(cè)試,因?yàn)槊總€(gè)算法都有自己的類(lèi),可以通過(guò)自己的接口單獨(dú)測(cè)試。

當(dāng)不同的行為堆砌在一個(gè)類(lèi)中時(shí),就很難避免使用條件語(yǔ)句來(lái)選擇合適的行為。

將這些行為封裝在一個(gè)個(gè)獨(dú)立的Strategy類(lèi)中,可以在使用這些行為的類(lèi)中消除條件語(yǔ)句。

策略模式就是用來(lái)封裝算法的,但在實(shí)踐中,我們發(fā)現(xiàn)可以用它來(lái)封裝幾乎任何類(lèi)型的規(guī)則,只要在分析過(guò)程中聽(tīng)到需要在不同的時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化模式的可能性。

在基本的策略模式中,選擇所用具體實(shí)現(xiàn)的職責(zé)用客戶(hù)端對(duì)象承擔(dān),并轉(zhuǎn)給策略模式的Context對(duì)象。

而在策略模式與簡(jiǎn)單工廠(chǎng)模式結(jié)合后,選擇具體實(shí)現(xiàn)的職責(zé)也由Context承擔(dān),最大的簡(jiǎn)化了客戶(hù)端的職責(zé)。

任何需求的變更都是需要成本的:添加算法時(shí),需在Context增加switch語(yǔ)句。

抽象工廠(chǎng)模式的反射技術(shù)可以進(jìn)一步優(yōu)化。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安宁市| 鄂温| 清水河县| 新丰县| 临潭县| 奉化市| 汶上县| 宜兰市| 文成县| 曲松县| 尼勒克县| 湘潭县| 娄底市| 桂东县| 海盐县| 略阳县| 洪湖市| 桦川县| 类乌齐县| 仙居县| 富源县| 礼泉县| 平顺县| 临城县| 新昌县| 青州市| 合江县| 钟山县| 台江县| 桐梓县| 什邡市| 宜阳县| 贵州省| 资兴市| 泰兴市| 双城市| 龙泉市| 巴里| 崇文区| 晋江市| 东乡族自治县|