亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Chap5:行為型設(shè)計(jì)模式————策略模式

sshe / 2382人閱讀

摘要:類(lèi)共享,因此需要實(shí)現(xiàn)中的所有抽象方法,如果有的具體策略類(lèi)比較簡(jiǎn)單,但還是必須要去實(shí)現(xiàn)它的抽象方法,因此會(huì)增加不必要的開(kāi)銷(xiāo)參考設(shè)計(jì)模式十八策略模式對(duì)象行為型深入面向?qū)ο竽J脚c實(shí)踐第版

因?yàn)樽罱趯W(xué)策略模式,所以想先跳過(guò)創(chuàng)建型設(shè)計(jì)模式中得適配器模式

定義

策略模式,顧名思義,就是提供多個(gè)策略的模式,用戶(hù)在不同的情況下可以選擇不同的策略,比如商場(chǎng)的打折策略(不同節(jié)假日不同的折扣方式),旅游出行的方式(提供飛行,或者火車(chē),或者大巴的方式)。再進(jìn)一步講,就是把這些同一個(gè)系列的不同的算法封裝起來(lái),讓它們能夠被客戶(hù)自由地使用。

UML圖

Drawn by StarUML

實(shí)例

大學(xué)課程(Lesson)中,有這樣的兩種課程,一種演講(Lecture),一種研討會(huì)(Seminar),兩種都需要進(jìn)行收費(fèi),并且有不同的收費(fèi)機(jī)制(chargeType),前者是固定收費(fèi)(FixedCost),后者則是按小時(shí)收費(fèi)(TimeCost)

CostStrategy.php


TimeCostStrategy.php

getDuration() * 5);  
    public function chargeType(){
        return "Hourly rate";
    }

}
?>

FixedCostStrategy.php

lesson.php

duration = $duration;
        $this->strategy = $costStrategy;
    }
    public function cost(){
        return $this->strategy->cost($this);
    }
    public function chargeType(){
        return $this->strategy->chargeType();
    }
    public function getDuration(){
        return $this->duration;
    }

    //其它方法
}
?>

Lecture.php

Seminar.php

Client.php

chargeType().",and the cost is ".$Seminar->cost();
?>
優(yōu)點(diǎn)

上下文(Context)和具體策略(ConcreteStrategy)是松耦合關(guān)系。因此上下文只知道它要使用某一個(gè)實(shí)現(xiàn)Strategy接口類(lèi)的實(shí)例,但不需要知道具體是哪一個(gè)類(lèi)

策略模式滿(mǎn)足“開(kāi)-閉原則”。當(dāng)增加新的具體策略時(shí),不需要修改上下文類(lèi)的代碼,上下文就可以引用新的具體策略的實(shí)例

消除冗余的if..else...語(yǔ)句

缺點(diǎn)

客戶(hù)端需要知道每一個(gè)策略類(lèi),并且知道這些類(lèi)有什么不同,因此要在策略行為與客戶(hù)行為密切相關(guān)的時(shí)候才使用這種模式,把策略暴露給客戶(hù)

策略模式會(huì)產(chǎn)生很多策略,因此開(kāi)銷(xiāo)問(wèn)題也是需要考慮的問(wèn)題

Context與Strategy之間不必要的通信開(kāi)銷(xiāo)。ConcreteStrategy類(lèi)共享Strategy,因此需要實(shí)現(xiàn)Strategy中的所有抽象方法,如果有的具體策略類(lèi)比較簡(jiǎn)單,但還是必須要去實(shí)現(xiàn)它的抽象方法,因此會(huì)增加不必要的開(kāi)銷(xiāo)

參考:
1.設(shè)計(jì)模式 ( 十八 ) 策略模式Strategy(對(duì)象行為型)
2.深入PHP:面向?qū)ο蟆⒛J脚c實(shí)踐(第3版)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21473.html

相關(guān)文章

  • 忘了再看設(shè)計(jì)模式-行為

    摘要:推文用設(shè)計(jì)模式解構(gòu)三國(guó)是一種什么體驗(yàn)行為型設(shè)計(jì)模式一策略模式工廠(chǎng)模式優(yōu)化結(jié)構(gòu)狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機(jī)與狀態(tài)模式責(zé)任鏈模式多個(gè)對(duì)象依次處理請(qǐng)求前者指定后者。代理模式代理針對(duì)一個(gè)對(duì)象,為了增加控制等中介雙方都是多個(gè),為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類(lèi)比:商店[Context]買(mǎi)完衣服買(mǎi)單[Stratege](現(xiàn)金[Concrete Stra...

    ShevaKuilin 評(píng)論0 收藏0
  • 設(shè)計(jì)模式行為

    摘要:設(shè)計(jì)模式分創(chuàng)建型模式,結(jié)構(gòu)型模式和行為型模式。責(zé)任鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免了請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系。狀態(tài)模式的核心是封裝,通過(guò)狀態(tài)的變更引起行為的變更。 前言 最近加班是真的很多,無(wú)法騰出大塊時(shí)間來(lái)學(xué)習(xí)。設(shè)計(jì)模式又不想只更到一半半途而廢,想了又想,決定精簡(jiǎn),保證大家一看就懂(看完就忘...)。設(shè)計(jì)模式分創(chuàng)建型模式,結(jié)構(gòu)型模式和行為型模式。到目前為止,創(chuàng)建型...

    hlcc 評(píng)論0 收藏0
  • J2EE下的常用設(shè)計(jì)模式

    摘要:當(dāng)然,除了讓我們顯得更加專(zhuān)業(yè)之外,在自己所學(xué)習(xí)或者工作的項(xiàng)目中,適當(dāng)合理的使用設(shè)計(jì)模式,能夠給項(xiàng)目帶來(lái)很大的好處。 簡(jiǎn)單說(shuō)兩句 本文首發(fā)公眾號(hào)【一名打字員】 對(duì)不住各位老鐵了,年前說(shuō)好要更幾波JAVA的東西,又偷懶了,沒(méi)辦法,在這里用小錘錘偷偷錘了自己幾下。由于工作原因,更新時(shí)間不定,各位老鐵有問(wèn)題可以私聊我哈。 對(duì)于初學(xué)者或者是正在向中高級(jí)的Java程序猿(打字員)來(lái)說(shuō),時(shí)刻梳理自己...

    robin 評(píng)論0 收藏0
  • 設(shè)計(jì)模式策略模式

    摘要:在策略模式中,一個(gè)類(lèi)的行為或其算法可以在運(yùn)行時(shí)更改。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。而本次示例使用策略模式來(lái)實(shí)現(xiàn)這種數(shù)學(xué)運(yùn)算。 在策略模式(Strategy Pattern)中,一個(gè)類(lèi)的行為或其算法可以在運(yùn)行時(shí)更改。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。其實(shí)現(xiàn)原理是定義一系列的算法,將他們一個(gè)個(gè)封裝起來(lái),并且是他們可以互相替換,這樣避免了使用 if … else 語(yǔ)句所帶來(lái)的復(fù)雜度和維護(hù)...

    104828720 評(píng)論0 收藏0
  • 設(shè)計(jì)模式--簡(jiǎn)化解釋(三)——行為模式

    摘要:創(chuàng)建型設(shè)計(jì)模式結(jié)構(gòu)型設(shè)計(jì)模式行為型設(shè)計(jì)模式行為型設(shè)計(jì)模式簡(jiǎn)而言之行為型設(shè)計(jì)模式關(guān)心的是對(duì)象之間的責(zé)任分配。這種模式被認(rèn)為是一種行為模式,因?yàn)樗梢愿淖兂绦虻倪\(yùn)行行為。 1.創(chuàng)建型設(shè)計(jì)模式2.結(jié)構(gòu)型設(shè)計(jì)模式3.行為型設(shè)計(jì)模式 行為型設(shè)計(jì)模式 簡(jiǎn)而言之 行為型設(shè)計(jì)模式關(guān)心的是對(duì)象之間的責(zé)任分配。它們與結(jié)構(gòu)模式的不同之處在于,它們不僅指定了結(jié)構(gòu),而且還概述了它們之間消息傳遞/通信的模式。換句...

    cangck_X 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<