design mode(php)

来源:https://www.cnblogs.com/peter-yan/archive/2018/02/11/8442776.html
-Advertisement-
Play Games

前段時間看了下設計模式 參考,以及head first設計模式,簡要如下 ...


前段時間看了下設計模式 參考,以及head first設計模式,簡要如下

## OO原則

* 封裝變化
* 多用組合,少用繼承
* 針對介面編程,不針對實現編程
* 為交互對象之間的松耦合設計而努力
* 開閉原則,對擴展開放,對修改關閉
* 依賴倒置原則,依賴抽象,不要依賴具體類
* 最少知識原則,不讓太多類耦合在一起,以免修改系統一部分,會影響到其他部分
* 單一責任原則,一個責任只指派給一個類

## 模式類表

* 備忘錄模式 備份對象某時刻的狀態,存儲在外部,需要時還原對象狀態(打游戲中的存儲游戲多個進度)
* 策略模式 多個演算法,對外一個介面,用戶可以根據需要切換(鴨子的叫聲,吱吱叫,不會叫,咕咕叫)
* 模板方法模式 流程、系統、演算法整體骨架固定,分步驟執行,部分步驟可供子類修改
* 觀察者模式 一個對象需要根據另一個對象的改變作出一些操作,需要監控改變(微博訂閱,公眾號訂閱)
* 工廠模式(簡單工廠,工廠方法,抽象工廠) 工廠生產一類產品,客戶從具體產品中解耦
* 單例模式(飽漢式,餓漢式)一個類只有一個實體
* 適配器模式 對象之間存在差異,使用一個轉換,使得客戶能像老介面那樣使用新對象(三孔插座適配兩空插座)
* 門面模式(外觀模式) 集成複雜子系統,對外提供簡單的使用方式(播放家庭影院)
* 裝飾者模式 包含已有產品,在產品上附加操作(咖啡,加摩卡,加奶泡,加豆漿)
* 命令模式 解耦請求發出者和具體執行者
* 狀態模式 對象中的操作根據對象的狀態不同而不同,狀態模式讓修改局部化,某一狀態中的對象操作修改不影響其他狀態(糖果機的未投幣,已投幣,售糖果,售罄狀態下的操作投幣,轉動曲柄,吐幣操作)
* 迭代器模式 單一責任原則,提供一致的方式順序訪問聚合內的各個對象,而不暴露對象在聚合中的表示(數組,list,hashtable)

## 其他模式

* 組合模式(合成模式)允許將對象組合成樹形結構來表現整體和部分層次結構,組合能讓客戶以一致的方式處理個別對象以及組合對象
* 責任鏈模式 創建一個對項鏈,請求過來時,對項鏈每個對象依序檢查這個請求,或者處理這個請求,或者把請求轉給對項鏈中下一個對象
* 生成器模式(建造者模式) 封裝一個產品的構造過程,並允許按步驟構造
* 蠅量模式(享元模式) 使用一個類的一個實例能提供許多“虛擬實例”(通過保存虛擬實例的屬性集合,虛擬實例類負責行為),目的通過共用減少實例開銷
* 中介者模式 對象之間的溝通和控制通過一個中介完成,對象之間解耦
* 原型模式 創建給定類的實例的過程很昂貴或很複雜或者暫時不能確定具體的實例的時候,可以先創建對象的種類
* 訪問者模式 當想為一個對象的組合增加新的能力,且封裝並不重要時,可以使用訪問者模式

php實現參見github

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、安裝vue-cli cnpm install vue-cli -g --執行全局安裝 2、創建一個webpack的基礎項目;命令:vue init webpack myproject; 以下是項目的目錄結構及說明 build是webpack配置 build.js // 生產環境構建代碼 chec ...
  • 最近閑來無聊,看了下ES6的語法,結合canvas實現了動畫特效——隨著滑鼠的移動,會有小球跟隨且自動消失的動畫。 首先,html部分,目前就一個canvas標簽。 其次,css部分,沒有考慮美觀,大家喜歡的話,可以自己添加樣式 最後,看下js實現部分 稍作解釋下我的設計思路: 首先,獲取canva ...
  • 主要問題: 1、javaScript代碼的編譯和執行過程,詞法作用域規則? 2、this的動態綁定方式有幾種? 3、全局和函數之外是不是還有其他的作用域? 4、為什麼代碼規範多禁止with、eval? ...
  • (一)元素選擇符 1. E(某個元素,如p) 2. id(使用id,如 idName) 3. class(使用class,如.myclass) 4. 通配符: (二)關係選擇符 1. 包含選擇符:E F(E所有的F包含子代,孫代,子子孫孫等等) 2. 子選擇符:E (基於元素某種特性定義的類,偽類通 ...
  • 一、前言 接著上一章的內容,繼續js的學習。 二、內容 解析與序列化 ...
  • 緣由 在急速的互聯網時代,原本ie系列的低版本瀏覽器就該淘汰了。可偏偏還是有很多xp系統ie7、8瀏覽器,這有讓網站甚是苦逼。練就了一套新技術,原本以為能大展身手,可卻在ie陣容中認慫了,不得不規規矩矩的寫著老得掉牙的代碼,用著早已塵封的技術。 (註:因為用戶原因可能使用ie7,而非蛋疼要網站支持i ...
  • 一、前言 繼續上一章的內容,繼續今天的Js學習。 二、內容 事件處理程式 事件對象 事件類型 ...
  • 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...