摘要:類共享,因此需要實現中的所有抽象方法,如果有的具體策略類比較簡單,但還是必須要去實現它的抽象方法,因此會增加不必要的開銷參考設計模式十八策略模式對象行為型深入面向對象模式與實踐第版
因為最近在學策略模式,所以想先跳過創建型設計模式中得適配器模式
定義策略模式,顧名思義,就是提供多個策略的模式,用戶在不同的情況下可以選擇不同的策略,比如商場的打折策略(不同節假日不同的折扣方式),旅游出行的方式(提供飛行,或者火車,或者大巴的方式)。再進一步講,就是把這些同一個系列的不同的算法封裝起來,讓它們能夠被客戶自由地使用。
UML圖Drawn by StarUML
實例大學課程(Lesson)中,有這樣的兩種課程,一種演講(Lecture),一種研討會(Seminar),兩種都需要進行收費,并且有不同的收費機制(chargeType),前者是固定收費(FixedCost),后者則是按小時收費(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(); ?>優點
上下文(Context)和具體策略(ConcreteStrategy)是松耦合關系。因此上下文只知道它要使用某一個實現Strategy接口類的實例,但不需要知道具體是哪一個類
策略模式滿足“開-閉原則”。當增加新的具體策略時,不需要修改上下文類的代碼,上下文就可以引用新的具體策略的實例
消除冗余的if..else...語句
缺點客戶端需要知道每一個策略類,并且知道這些類有什么不同,因此要在策略行為與客戶行為密切相關的時候才使用這種模式,把策略暴露給客戶
策略模式會產生很多策略,因此開銷問題也是需要考慮的問題
Context與Strategy之間不必要的通信開銷。ConcreteStrategy類共享Strategy,因此需要實現Strategy中的所有抽象方法,如果有的具體策略類比較簡單,但還是必須要去實現它的抽象方法,因此會增加不必要的開銷
參考:
1.設計模式 ( 十八 ) 策略模式Strategy(對象行為型)
2.深入PHP:面向對象、模式與實踐(第3版)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21473.html
摘要:推文用設計模式解構三國是一種什么體驗行為型設計模式一策略模式工廠模式優化結構狀態模式隨著狀態改變而改變行為。推文狀態機與狀態模式責任鏈模式多個對象依次處理請求前者指定后者。代理模式代理針對一個對象,為了增加控制等中介雙方都是多個,為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現金[Concrete Stra...
摘要:當然,除了讓我們顯得更加專業之外,在自己所學習或者工作的項目中,適當合理的使用設計模式,能夠給項目帶來很大的好處。 簡單說兩句 本文首發公眾號【一名打字員】 對不住各位老鐵了,年前說好要更幾波JAVA的東西,又偷懶了,沒辦法,在這里用小錘錘偷偷錘了自己幾下。由于工作原因,更新時間不定,各位老鐵有問題可以私聊我哈。 對于初學者或者是正在向中高級的Java程序猿(打字員)來說,時刻梳理自己...
摘要:創建型設計模式結構型設計模式行為型設計模式行為型設計模式簡而言之行為型設計模式關心的是對象之間的責任分配。這種模式被認為是一種行為模式,因為它可以改變程序的運行行為。 1.創建型設計模式2.結構型設計模式3.行為型設計模式 行為型設計模式 簡而言之 行為型設計模式關心的是對象之間的責任分配。它們與結構模式的不同之處在于,它們不僅指定了結構,而且還概述了它們之間消息傳遞/通信的模式。換句...
閱讀 1829·2023-04-26 00:59
閱讀 3130·2021-11-15 18:10
閱讀 3072·2021-09-22 16:02
閱讀 766·2021-09-02 15:15
閱讀 3716·2019-08-30 15:56
閱讀 1917·2019-08-30 15:54
閱讀 2858·2019-08-29 16:31
閱讀 2035·2019-08-29 16:10