久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

淺談PHP中的裝飾器模式

裝飾器模式允許向一個現有的對象添加新的功能,同時又不改變其結構。本篇文章帶大家了解PHP中的裝飾器模式,介紹一下裝飾器的好處以及最適用于的場景。

淺談PHP中的裝飾器模式

工廠模式告一段落,我們來研究其他一些模式。不知道各位大佬有沒有嘗試過女裝?據說女裝大佬程序員很多喲。其實,今天的裝飾器模式就和化妝這件事很像。相信如果有程序媛MM在的話,馬上就能和你講清楚這個設計模式。

Gof類圖及解釋

裝飾這兩個字,我們暫且把他變成化妝。首先你得有一張臉,然后打底,然后上妝,可以早上來個淡妝上班,也可以下班的時候補成濃妝出去嗨。當然,碼農們下班的時間點正好是能趕上夜場的下半場的。話說回來,不管怎么化妝,你的臉還是你的臉,有可能可以化成別人不認識的另一個人,但這的的確確還是你的臉。這就是裝飾器,對對象(臉)進行各種裝飾(化妝),讓這個臉更好看(增加職責)。

GoF定義:動態地給一個對象添加一些額外的職責,就增加功能來說,Decorator模式相比生成子類更為靈活

GoF類圖:

淺談PHP中的裝飾器模式

代碼實現:

interface Component{     public function operation(); }  class ConcreteComponent implements Component{     public function operation(){         echo "I'm face!" . PHP_EOL;     } }

很簡單的一個接口和一個實現,這里我們就把具體的實現類看作是一張臉吧!

abstract class Decorator implements Component{     protected $component;     public function __construct(Component $component){         $this->component = $component;     } }

抽象的裝飾者類,實現Component接口,但并不實現operation()方法,讓子類去實現。在這里主要保存一個Componet的引用,一會就要對他進行裝飾。對應到上方的具體類,我們就是要準備給臉化妝啦!

class ConcreteDecoratorA extends Decorator{     public $addedState = 1; // 沒什么實際意義的屬性,只是區別于ConcreteDecoratorB      public function operation(){         echo $this->component->operation() . "Push " . $this->addedState . " cream!" . PHP_EOL;     } } class ConcreteDecoratorB extends Decorator{     public function operation(){         $this->component->operation();         $this->addedBehavior();     }      // 沒什么實際意義的方法,只是區別于ConcreteDecoratorA     public function addedBehavior(){         echo "Push 2 cream!" . PHP_EOL;     } }

兩個具體裝飾者。在這里我是涂了兩次霜,畢竟是純爺們,對化妝這事兒真的是不了解。好像第一步應該先是打粉底吧?不過這次就這樣,我們這兩個裝飾器實現的就是給臉上涂兩層霜。

  • 從代碼中可以看出,我們是一直對具體的那個ConcreteComponent對象來進行包裝
  • 再往下的話其實我們是對他的operation()這個方法包裝了兩次,每次都是在前一次的基礎上加了一點點東西
  • 不要糾結于A和B裝飾器上的added屬性和方法,他們只是GoF類圖中用以區別這兩個裝飾器不是同一個東西,每個裝飾器都可以干很多別的事,Component對象也不一定只有operation()這一個方法,我們可以選擇性的去裝飾對象中的全部或者部分方法
  • 好像我們都繼承了Component,直接子類一路重寫不就行了,搞這費勁干嘛?親,了解下組合的概念喲,我們的Decorator父類里面是一個真實對象的引用哦,解耦了自身哦,我們只給真實的對象去做包裝,您可別直接實例化裝飾器來直接用
  • 還是沒懂?好處呢?老系統的類啊、方法啊你敢隨便亂改?想給前任寫的牛(S)逼(B)代碼擴展新功能時不妨試試裝飾器這貨,說不定有奇效!

手機這玩意干不過某米、某O、某為,這沒法玩呀,好吧,哥們去專心做手機殼吧!嗯,我先準備了一個透明殼(Component),貌似有點丑,沒辦法,誰叫哥們窮。給某米的加上各種純色(DecoratorA1),然后背后印上各種顏色的植物(DecoratorB1)吧;某O的手機最近喜歡找流量明顯做代言,那我給他的手機殼就用各種炫彩色(DecoratorA2)和明星的卡通頭像(DecoratorB2);最后的某為,好像手機已經開始引領業界潮流了,折疊屏這玩意不是要砸我這賣手機殼的生意嘛!!好吧,哥不給你們做了,還是跟我的某米、某O混去吧!!

完整代碼:裝飾器模式

https://github.com/zhangyue0503/designpatterns-php/blob/master/04.decorator/source/decorator.php

實例

繼續來發短信,之前我們用工廠模式解決了多個短信運營商的問題。這回我們要解決的是短信內容模板的問題。對于推廣類的短信來說,根據最新的廣告法,我們是不能出現“全國第一”、“全世界第一”這類的詞語的,當然,一些不太文明的用語我們也是不能使用的。

現在的情況是這樣的,我們有一個很早之前的短信模板類,里面的內容是固定的,老系統依然還是使用這個模板,老系統是面對的內部員工,對語言內容的要求不高。而新系統則需要向全網發送,也就是內外部的用戶都要發送。這時,我們可以用裝飾器模式來對老系統的短信模板進行包裝。其實說簡單點,我們就是用裝飾器來做文本替換的功能。好處呢?當然是可以不去改動原來的模板類中的方法就實現了對老模板內容的修改擴展等。

短信發送類圖:

淺談PHP中的裝飾器模式

完整源碼:短信發送裝飾器方法

https://github.com/zhangyue0503/designpatterns-php/blob/master/04.decorator/source/message-decorator.php

<?php // 短信模板接口 interface MessageTemplate {     public function message(); }  // 假設有很多模板實現了上面的短信模板接口 // 下面這個是其中一個優惠券發送的模板實現 class CouponMessageTemplate implements MessageTemplate {     public function message()     {         return '優惠券信息:我們是全國第一的牛X產品哦,送您十張優惠券!';     } }  // 我們來準備好裝飾上面那個過時的短信模板 abstract class DecoratorMessageTemplate implements MessageTemplate {     public $template;     public function __construct($template)     {         $this->template = $template;     } }  // 過濾新廣告法中不允許出現的詞匯 class AdFilterDecoratorMessage extends DecoratorMessageTemplate {     public function message()     {         return str_replace('全國第一', '全國第二', $this->template->message());     } }  // 使用我們的大數據部門同事自動生成的新詞庫來過濾敏感詞匯,這塊過濾不是強制要過濾的內容,可選擇使用 class SensitiveFilterDecoratorMessage extends DecoratorMessageTemplate {     public $bigDataFilterWords = ['牛X'];     public $bigDataReplaceWords = ['好用'];     public function message()     {         return str_replace($this->bigDataFilterWords, $this->bigDataReplaceWords, $this->template->message());     } }  // 客戶端,發送接口,需要使用模板來進行短信發送 class Message {     public $msgType = 'old';     public function send(MessageTemplate $mt)     {         // 發送出去咯         if ($this->msgType == 'old') {             echo '面向內網用戶發送' . $mt->message() . PHP_EOL;         } else if ($this->msgType == 'new') {             echo '面向全網用戶發送' . $mt->message() . PHP_EOL;         }      } }  $template = new CouponMessageTemplate(); $message = new Message();  // 老系統,用不著過濾,只有內部用戶才看得到 $message->send($template);  // 新系統,面向全網發布的,需要過濾一下內容哦 $message->msgType = 'new'; $template = new AdFilterDecoratorMessage($template); $template = new SensitiveFilterDecoratorMessage($template);  // 過濾完了,發送吧 $message->send($template);

說明

  • 裝飾器的最大好處:一是不改變原有代碼的情況下對原有代碼中的內容進行擴展,開放封閉原則;二是每個裝飾器完成自己的功能,單一職責;三是用組合實現了繼承的感覺;
  • 最適用于:給老系統進行擴展
  • 要小心:過多的裝飾者會把你搞暈的
  • 不一定都是對同一個方法進行裝飾,其實裝飾者應該
贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
国产探花一区在线观看| 蜜臀久久99精品久久久久久9| 亚洲精品护士| 中文字幕日韩欧美精品高清在线| 国产精品密蕾丝视频下载| 国产乱码精品一区二区亚洲| 国产九一精品| 国产精品尤物| 亚洲精品伊人| 国产免费av国片精品草莓男男| 国产精品亚洲二区| 国产伦精品一区二区三区在线播放| 天海翼亚洲一区二区三区| 日韩精品一区二区三区中文在线| 最新亚洲国产| 麻豆精品一区二区综合av| 国产精品久久久久久久久久10秀| 正在播放日韩精品| 亚洲第一精品影视| 欧美在线资源| 亚洲制服欧美另类| 欧美精品国产| 美女免费视频一区| 国产网站在线| 午夜精品亚洲| 欧美亚洲一级| a国产在线视频| 黄色成人91| 久久国内精品自在自线400部| 国内一区二区三区| 亚洲精品1区2区| 国产私拍福利精品视频二区| 国产精选在线| 蜜臀久久99精品久久久久宅男 | 欧美成人一二区| 欧美日韩精品免费观看视欧美高清免费大片 | 精品72久久久久中文字幕| 成人啊v在线| 免费在线看一区| 亚洲乱亚洲高清| 国产精品亚洲人成在99www| 精品一级视频| 久久国产主播| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲精品人人| 日韩精品一级| 日韩久久视频| 伊人久久大香伊蕉在人线观看热v| 日韩欧美在线精品| 国产一区二区三区成人欧美日韩在线观看| 日韩不卡免费高清视频| 亚洲一区二区日韩| 精品久久久久中文字幕小说| 激情丁香综合| 日韩动漫一区| 国产资源在线观看入口av| 日韩久久电影| 亚洲精品免费观看| 亚洲va中文在线播放免费| 一区二区精彩视频| 久久av电影| 在线天堂中文资源最新版| 蜜臀久久久久久久| 欧美好骚综合网| 天堂精品久久久久| 色网在线免费观看| 一区二区日韩免费看| 精品国产麻豆| 免费成人性网站| 日韩免费在线| 日本三级亚洲精品| 欧美午夜精品一区二区三区电影| 亚洲一二三区视频| 成人在线网站| 国产精品一区三区在线观看| 欧洲av一区二区| 91麻豆精品激情在线观看最新| 日韩大片在线播放| 日本视频在线一区| 好吊日精品视频| 精品国产a一区二区三区v免费| 美国三级日本三级久久99| 久草免费在线视频| 欧美欧美黄在线二区| 欧美69视频| 国产在线一区不卡| 日韩激情网站| 亚洲黄页一区| 日韩高清中文字幕一区二区| 国产精品亚洲综合久久| 欧美特黄视频| 激情综合婷婷| 日韩精品欧美成人高清一区二区| 午夜av成人| 精品免费在线| 日本a口亚洲| 日韩一区精品字幕| 日韩av一级| 福利在线一区| 国产精品一区毛片| **爰片久久毛片| 四虎国产精品免费久久| 99热免费精品| 99精品综合| 超碰99在线| 麻豆一区二区三区| 日韩精品高清不卡| 免费视频最近日韩| 亚洲一区欧美二区| 夜夜嗨av一区二区三区网站四季av| 日韩在线中文| 日本欧美国产| 久久精品国产在热久久| 国产日韩视频在线| 日韩精品视频在线看| 亚洲日本欧美| 爽爽淫人综合网网站| 亚州av乱码久久精品蜜桃| 91精品韩国| 色88888久久久久久影院| 国际精品欧美精品| 精品精品国产三级a∨在线| 久久不见久久见国语| 国产精品免费精品自在线观看| 久久国产精品免费精品3p| 在线看片一区| 亚洲色图网站| 亚洲精品成人一区| 日韩av影院| 欧美天堂一区二区| 国产日韩一区二区三区在线 | 天堂俺去俺来也www久久婷婷| 欧美日韩视频| 国产精品av久久久久久麻豆网| 久久美女性网| 亚洲网站视频| 亚洲精品va| 三级欧美在线一区| 亚洲精品乱码日韩| 日韩国产一二三区| 久久国产三级| 美女久久久久久 | 一区二区三区四区精品视频| 亚洲精品一级二级三级| 久久国产高清| 国产精品人人爽人人做我的可爱| 99国产精品自拍| 蜜臀久久久99精品久久久久久| 亚洲在线久久| 国产欧美69| 91亚洲国产成人久久精品| 在线看片国产福利你懂的| 久久蜜桃av| 美日韩精品视频| 日韩av影院| 久久电影tv| 久久一二三区| 国产精品对白| 亚洲va中文在线播放免费| 亚洲免费播放| 石原莉奈在线亚洲三区| 欧美日韩亚洲一区二区三区在线 | 欧美日韩尤物久久| 在线亚洲国产精品网站| 中文字幕亚洲精品乱码| 久久国产欧美日韩精品| 成人在线黄色| 午夜久久一区| 日本免费新一区视频| 久久久国产精品网站| 日韩精品一区二区三区中文 | 欧美a在线观看| 麻豆精品少妇| 深夜视频一区二区| 蜜桃一区二区三区在线观看| 国产精品成人一区二区网站软件| 91免费精品| 视频一区中文字幕| 麻豆精品视频在线| 黄色av日韩| 国产精品白丝久久av网站| 色婷婷狠狠五月综合天色拍| 一级欧美视频| 久久不卡日韩美女| 亚洲91视频| 日韩精品视频网站| 中文另类视频| 青青草91视频| 在线日韩中文| 国产精品欧美三级在线观看| 亚洲一级网站| 国产精品22p| 日韩视频免费| 里番精品3d一二三区| 中文一区二区| 美腿丝袜亚洲一区| 国产亚洲毛片在线| 久久精品一区二区国产| 久久国产精品久久w女人spa| 国产精品网站在线看|