Ruby 中的設計模式-裝飾模式 Decorator
Introduction 裝飾模式允許我們在沒有影響同類的物件下對物件改變其行為 裝飾模式是替代創建子類別的好方法 情境探討 假設我們有一台車的商品,售價為一百。 class Car def price 100 end end car = Car.new puts car.price 我們現在需要為車子新增零件。 class CarWithLight < Car def price 120 end end 現在有一台跑車掛滿零件,很貴。
Introduction 裝飾模式允許我們在沒有影響同類的物件下對物件改變其行為 裝飾模式是替代創建子類別的好方法 情境探討 假設我們有一台車的商品,售價為一百。 class Car def price 100 end end car = Car.new puts car.price 我們現在需要為車子新增零件。 class CarWithLight < Car def price 120 end end 現在有一台跑車掛滿零件,很貴。
還記得一開始自學程式語言時,大家一定或多或少都聽過一個名詞 物件導向。然後身為程式新手和非程式相關科系畢業的你也許會開始 Google 它到底是什麼意思,然後你會在 維基百科 上查到諸如此類的解釋: 物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、程式碼與方法。物件則指的是類別的實體。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的物件。 當下看完名詞解釋,如果你和筆者一樣只是個普通人的話應該根據名詞解釋還是無法了解一個抽象的概念,然後可能因為你強盛的好奇心,會繼續在網路上搜尋更多的文章來理解這樣抽象的概念,但有可能你會發現閱讀更多文章後仍然似懂非懂,不要擔心這是屬於正常的現象。 找到方向 上述所描寫的正是筆者個人學習上的經歷,看了些許文章後,仍然覺得少了點什麼才能對整體抽象的理論有更進一步的理解。直到閱讀了 Practical Object-Oriented Design: An Agile Primer Using Ruby 才發現作者 Sandi Metz 很懂得如何引導新手走入物件導向的大門。例如談論到物件導向時一定會提到的幾個重要原則:SOLID(單一功能、開閉原則、李氏替換、介面隔離、依賴反轉)當你看過這些原則後對於實際開發上該怎麼應用上,根據筆者個人的學習經驗似乎只會產生更多的疑問。但作者似乎知道與其講那些理論,不如透過探討實際的程式碼由淺入深的方式一步一步告訴你如果同樣的程式碼,採用物件導向的方式撰寫程式碼會有什麼優缺點?如果不使用物件導向的方式去寫可能會造成後續維護程式碼上困難?筆者看完那本書後終於對物件導向有了更深一層的概念,它也提供了思考程式碼「為什麼要這樣寫會更好?」的方向,而不僅僅是停在「把程式碼寫出來會動就好⋯⋯」的層面上。 接下來將分享書中部分的概念,去探討如何運用技巧去撰寫出容易維護的程式碼。 管理相依性 Manage Dependencies 在物件導向的程式世界中,物件會有所謂 相依性 的問題,什麼是相依性呢?我們舉現實生活中的車子來理解這個抽象概念。車子是一種交通工具對吧?在 Ruby 中車子將可能會是車子這個類別中的一個實體物件,它的行為是進行移動。那車子為什麼可以移動的呢?車子是需要靠輪子來移動的,我們也可以說車子依賴輪子來進行移動,沒有輪子的車子可能哪也去不了,所以車子對輪子產生了很高的相依性。
最近很火紅的第一人稱射擊吃雞類型遊戲「Apex Legends」上市8小時內同時在線玩家人數突破100萬人(筆者也是其中之一),這款遊戲和 Ruby 能擦出什麼樣的火花呢?在本文中我們將嘗試使用 Ruby 搭配玩家間熱門的語音通訊社群軟體 Discord 製作聊天機器人再透過 API 獲取玩家於遊戲中的相關戰績資訊。該透過哪些步驟快速製作我們的聊天機器人呢?讓我們接下去看看吧! 前置作業 假設你已經安裝好了程式語言 Ruby(如果沒有安裝的請到官方網站根據自己所使用的 OS 安裝 Ruby) 然後我們需要建立一個 Ruby 檔案,在本文中我們建立一個名為 chatbot.rb 的檔案在資料夾 discord 下,其中副檔名為 .rb 代表這是一個 Ruby 的檔案。 接下來透過終端機(何謂終端機可以參考連接文章的前面部份)進入 chatbot.rb 所在的資料夾中並輸入 gem install bundler 透過 Ruby 的套件管理工具 Gem 來安裝相依性套件版本管理工具 Bundler 後再輸入指令 bundle init 來初始化 Bundler 的相關資料。完成後會自動建立一個檔名為 Gemfile 的檔案,這個檔案是用來指定 Ruby 專案所使用 Gem 相關套件的設定檔。我們在 Gemfile 檔案中的最下方添加一行設定: # 你的 Ruby 專案資料夾下/Gemfile # (其他 gem...) gem "discordrb" 然後透過終端機輸入命令 bundle install 就會自動幫我們安裝別人打包好的 Discord 機器人函式庫 discordrb。 獲得 Discord Bot Token要製作 Discord Bot 需要先獲得機器人的 Token,需要在 Discord Developer Portal 申請一組帳號和在帳號下新增一個應用程式,並在 Bot 頁面生成一組 Token。如下圖範例位置: