跳到主要內容


程式語言概念-設計模式

程式語言概念

設計模式

設計模式是用在軟體開發的時候的工具,目的是要增加程式碼的利用率、維護性、可讀性,而這個概念是在類別的基礎上的加強跟應用,是很強大的工具,個人認為在五千行以上的程式,沒有使用,就很難好好掌控該轉體的開發。

設計原則

在設計類別的時候,有幾個大原則
  • 單一職責原則
  • 里氏替換原則
  • 依賴倒置原則
  • 介面隔離原則
單一職責元則
顧名思義就是只做一件事情,從類別、介面、方法、每一行,在設計的時候都要盡量只讓其做一件事情,比如說類別在設計的時候,定義了鳥這種概念,所以這個類別只能做鳥的事情,不能多做其他類別的事情,再來去解析他的方法,每個方法也只能處理一件事情,不能下不同參數就做不一樣的事情,如果這些方法是有辦法歸類的,原則上必須分開,如跟改類別參數的跟該類別的特定動作,在介面上就應該分開設計,後面再一一繼承,雖然原則如次,但在實際上執行的時候,會遇到很多問題使得誤法做到。

里氏替換原則
子類別需要完全實作父類別的方法,子類別可以自定義自己的屬性、方法,而在複寫父類別方法時,輸入參數可以被放大範圍,輸出參數可以被縮小範圍。

依賴倒置原則
高級模組不應該依賴低級模組,而是兩者都依賴抽象模組,抽象內容不應依賴細節,細節應該依賴抽象,需要抽象畫的建議都放在介面上。

介面隔離原則
在設計介面的時候,介面的功能盡可能小,不要讓使用者太清楚知道定義方法相係內容,把使用率高或是佔資源的設備的介面隔離開來,另外不要隔離過頭。

設計模式的分類,大致分成幾類,最常討論的就是Gof的23個模式,並常用的執行緒跟圖形界面開發會用到的MVC。
  • Creational 模式
  • Structural 模式
  • Behavioral 模式
  • 執行緒模式
  • MVC模式

Creational 模式:

此模式就是歸類出常見的用來產生物件的類別的設計方法,主要是針對物件生成,一般類別在使用內部的會分成旨在類別內部使用的資料跟函數以及對外開放的資料跟函數,而在這在這些類別中,所生成的物件可能會有以下這些特性。

  • 同類型的物件生成管理:不同地方的Pizza、不同口味的Pizza
  • 同類型的物件但內容組成差異大:迷宮
  • 整個軟體執行過程只能生成一次:工作管理員
  • 該物件在被生成的時候,都會用同樣的初始狀態被執行
以下是常見種類:
  • 簡單工廠模式、工廠方法模式、抽象工廠模式-連結
  • 建造者模式-連結
  • 原型模式-連結
  • 單例模式-連結
Creational 模式-雜談

Structural 模式


此類型討論物件或類別之間的相互關係,主要是針對生成之後方法的使用去設計關係,如繼承、互叫其他類別函式、實現其他類別物件,使其介面、撰寫方法統一,所生成的物件可能會有以下這些特性。


  • 外部開發函式使用
  • 同樣類別在不同環境下使用
  • 不同類別組合在同意環境中
  • 類別功能擴增
  • 統一對外介面
  • 對於常用類別先行是做物件,讓軟體後續使用
  • 代理原本使用者進行軟體控制
以下常見種類:

structural 模式-雜談

Behavioral 模式

對於軟體內部的運作行為,主要是針對方法,進行模組化的設計,所生成的物件可能會有以下這些特性。


  • 對於多條件確認,確認完成之後執行特定行為
  • 下達指令,對於指令執行特定動作
  • 對於清單中,進行迭代的動作,不透露底層運作
  • 將演算法把包裝起來,讓軟體使用
  • 對軟體特定物件,進行紀錄的行為
  • 對於軟體特定物件,進行特定的初始化過程
  • 提供物件檢測介面
  • 對於各物件溝通過程提供一個中間介面進行構通
  • 對於特定資料轉換成特定行為
  • 對於物件的狀態進行儲存,當需要的時候可以進行回復


以下常見種類:


Behavioral 模式-雜談

執行緒模式

對於軟體使用運算資源進行管理,享元模式的應用。
  • 多執行緒池
  • 異步同步執行

MVC模式

對圖形介面軟體進行有效率的個設計,分成三個部分View、Controller、Model。
  • Model
  • Controller
  • View

Model

Model模式主要是放置自訂的資料類型型態、資料庫連結儲存功能、其他類型檔案的資料獲得、被controller呼叫的介面、互叫controller的介面、資料處理運算過程(商業過程)。
Controller

呼叫model的介面以獲取資料內容、傳輸資料到model進行運算、對於View的動作或命令解析動作。
View

跟使用者互動,根據使用者個動作,轉換成動作或指令傳送到控制器進行運作。

Client_server模式

需要更新內容

 投影片-slideshare:程式語言概念_變數
 影片-youtube:程式語言蓋面_變數
 程式碼-Github:程式語言概念_變數
下一單元:程式語言學習大綱

留言

這個網誌中的熱門文章

程式語言學習概論(1)

程式語言 介紹

語言學習-English-Lights

Song Lyric Title : Lights Singer :Ellie Goulding Album :  Bright Lights Release Date :  2011 I had a way then losing it all on my own I had a heart then but the queen has been overthrown And I'm not sleeping now the dark is too hard to beat And I'm not keeping up the strength I need to push me You show the lights that stop me turn to stone You shine it when I'm alone And so I tell myself that I'll be strong And dreaming when they're gone 'Cause they're calling, calling, calling me home Calling, calling, calling home You show the lights that stop me turn to stone You shine them when I'm alone Noises, I play within my head Touch my own skin and hope they'll still be there And I think back to when my brother and my sister slept In and on my place the only time I feel safe You show the lights that stop me turn to stone You shine it when I'm alone And so I tell myself that I'...

Python-資料庫-mongodb-pymongo

Python 資料庫 mongodb-pymongo 安裝: linux、mac:pip3 install pymongo windows: import pymongo client = pymongo.MongoClient("mongodb://localhost:27017/") db = client['demo_db'] col = db['demo_col'] dict1 = { "name": "ab123ab456g", "day": "1890-04-05" } result = col.insert_one(dict1)  dict2 = [   { "name": "ki", "day": "1666-1-1"},   { "name": "aa", "day": "1222-11-11"},   { "name": "gg-gg", "day": "1333-02-22"},   { "name": "T-T", "day": "1444-03-02"},   { "name": "f-f", "day": "1555-01-01"} ] result = col.insert_many(dict2) result = col.find_one() print(result) results = col.find() for result in col.find(): print(result) results = col.find() query = {'...