日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php的类图怎么生成_PHP设计模式之简单工厂模式

發布時間:2024/8/5 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php的类图怎么生成_PHP设计模式之简单工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP設計模式之簡單工廠模式

先從簡單工廠入門,不管是面試還是被他人面試,在問到設計模式的時候,大多數人都會提到工廠模式。毫無疑問,工廠相關的幾種模式在設計模式中是最出名的也是應用比較廣泛的一種模式。在GoF設計模式中也都是屬于創建型的模式。

但是,能夠說明白簡單工廠、工廠模式、抽象工廠模式這三種模式的人還真能讓面試官刮目相看。這里有個前提,是你真的能說明白,大部分人,包括在深入研究設計模式之前,我也沒辦法說清楚。不管是我去面試,還是面試其別人。當我面試別人的時候,能講個大概也就差不多了。而我去面試的時候,也就是類似的講個大概。經歷不少挫折之后才有了想深入的研究研究設計模式的想法,于是便會產生這一系列的文章。從這篇簡單工廠開始,我們一起再次深入的對設計模式進行學習。

當然,這里用的是PHP。

解釋

簡單工廠,也稱靜態工廠,不屬于GoF23種設計模式。但是可以說是所有的設計模式中大家可能最容易理解,也可能在你的代碼中早就已經用過不知道多少次的一種設計模式了。我們先從一個最最簡單的代碼段來看。

// Factory class Factory {public static function createProduct(string $type) : Product{$product = null;switch ($type) {case 'A':$product = new ProductA();break;case 'B':$product = new ProductB();break;}return $product;} }

沒錯,核心點就是中間那段簡單的switch代碼,我們在返回值類型中固定為Product接口的實現。

在這段代碼中,使用了PHP新特性,參數類型及返回值類型

產品接口和產品實現

// Products interface Product {public function show(); }class ProductA implements Product {public function show(){echo 'Show ProductA';} }class ProductB implements Product {public function show(){echo 'Show ProductB';} }

最后客戶端的使用就很簡單了

// Client $productA = Factory::createProduct('A'); $productB = Factory::createProduct('B'); $productA->show(); $productB->show();

從以上代碼可以看出,其實這里就是一個工廠類根據我們傳入的字符串或者其他你自己定義的標識符,來返回對應的產品(Product對象)。

形象化一點的比喻:我是一個賣手機的批發商(客戶Client,業務方),我需要一批手機(產品Product),于是我去讓富士康(工廠Factory)來幫我生產。我下了訂單($type變量)指明型號,然后富士康就給我對應型號的手機,然后我就繼續我的工作了,和富士康的合作還真是挺愉快的。

這里比較規范的寫法可能是所有產品都會去實現一個統一的接口,然后客戶端只知道接口的方法統一調用即可。不規范的話也可以不使用接口,返回各種不同的對象,類似于外觀(Facade)模式進行統一的門面管理。

源碼地址:簡單工廠基礎類圖實現

實例

場景:短信發送功能模塊。現在我們使用了三個商家的,分別是阿里云、蝶信、極光的短信服務,在不同業務中可能使用不同的短信發送商,使用簡單工廠可以方便的完成這個需求。

類圖

代碼<?phpinterface Message {public function send(string $msg); }class AliYunMessage implements Message{public function send(string $msg){// 調用接口,發送短信// xxxxxreturn '阿里云短信(原阿里大魚)發送成功!短信內容:' . $msg;} }class BaiduYunMessage implements Message{public function send(string $msg){// 調用接口,發送短信// xxxxxreturn '百度SMS短信發送成功!短信內容:' . $msg;} }class JiguangMessage implements Message{public function send(string $msg){// 調用接口,發送短信// xxxxxreturn '極光短信發送成功!短信內容:' . $msg;} }Class MessageFactory {public static function createFactory($type){switch($type){case 'Ali':return new AliYunMessage();case 'BD':return new BaiduYunMessage();case 'JG':return new JiguangMessage();default:return null;}} }// 當前業務需要使用極光 $message = MessageFactory::createMessage('Ali'); echo $message->send('您有新的短消息,請查收');

源碼地址:簡單工廠實例-短信發送工廠

說明
  • createMessage一定要使用static?不一定,看自己業務情況決定,需要常駐的全部static,按需實例化的就new完了再正常->去調用
  • 三個message子類一定需要實現接口?也不一定,php本身就是弱類型語言,可以不去強制實現,但使用接口更加符合面向對象的規范(請參考多態),簡單工廠本身其實是對多態的一種表述和應用
  • 當需要增加發送消息的渠道時,添加新類繼承Message接口,實現send()方法,修改MessageFactory()中createFactory()方法里的switch
  • 思考上述修改違背了面向對象的什么原則?(提示:開放XX)
  • 實例中沒有使用返回值類型?本身這也是新語法,對于老版本兼容來說可以不需要去寫,但是如果公司技術棧已經升級到7以上的話,建議這種設計模式架構類的代碼還是按照上方解釋中的新特性寫法去書寫,也就是帶上參數類型和返回值類型,更加的符合規范,也更容易理解
  • 實例中傳錯了$type返回NULL怎么辦?親,實際寫代碼的時候請處理好這個問題喲,返回一個默認的,或者上層捕獲都是不錯的解決方案,當然最好客戶端那邊提前判斷好,沒問題了再進工廠吧

下期看點

工廠方法模式,接著發短信,但這回我們讓客戶端換個姿勢來發

總結

以上是生活随笔為你收集整理的php的类图怎么生成_PHP设计模式之简单工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。