主頁 > 軟體設計 > 談談我作業中的23個設計模式

談談我作業中的23個設計模式

2022-11-20 06:49:18 軟體設計

 

 

從基礎的角度看,設計模式是研究類本身或者類與類之間的協作模式,是進行抽象歸納的一個很好的速成思路,后面閱讀設計模式后,為了加深理解,對相關圖片進行了描繪和微調,從技術的角度已經有很多好的總結,本文會換一種角度思考,既然設計模式研究的是類與類的關系,我們作為作業的個體,一些作業中的策略是不是也可以進行類比,可以更好地去思考這些模式?答案是肯定的,

創建型模式 5

 

抽象工廠(Abstract Factory):多套方案

 

抽象工廠模式是對創建不同的產品型別的抽象,對應到作業中,我們的確應該具備提供多套方案的能力,這也是我們常說的,要提供選擇題,當你有這樣的前瞻意識,一般也會被打上思考較多的標簽,但是內在來說,的確想問題更加全面了,

 

 

 

生成器(Builder):善于分解

 

生成器模式是對一個個體的創建程序進行細分,拆解為不同的創建部分,這個對應到作業中,作為一些專案管理人員或者團隊管理者,需要將一個大泥球一樣的事務,合理分解,讓大家各司其職,充分發揮才能,同樣,我們對日常的作業內容,也可以按照結構去進行劃分,從而更有調理,

 

工廠方法(Factory Method):抽象思考

工廠方法模式是說將提供某一產品的程序進行抽象,通過介面的模式去規范出來,類似的,我們很多做事的程序,都是面向程序,沒有抽象提煉一下,如果經過進一步思考,那么可以往上再提煉一個層次,發現事物的本質:到底在做什么,我們的職責是什么,提供什么樣的價值,想的更清楚,做的也會更加準確,

 

 

 

原型(Prototype):傳承知識

原型模式是說,利用拷貝物件的方法,減少一些復雜的創建程序,這里我們能夠學到的是,需要做好日常的積累,很多方案不是每次來都重寫,是可以在原來的方案上進行拷貝復用的,這個clone的程序,往往也是知識傳承的程序,如果有比較好的傳承機制,那么會大大提升服務效率,

 

 

 

單件(Singleton):專注

單件模式是說在多執行緒的情況下,要保證物件只創建一遍,作為獨一無二的資源,這個我覺得,應該去review一下我們的作業模式,雖然我們常常要并發很多事情,但是如果處處被打斷,每件事都想干好,那么可能每件事都干不好,我們要確保在某個時間段竭力地做好一件事,事件是一件件有效解決的,不是一起慢慢解決的,

 

 

結構型模式 7

 

配接器(Adapter):適應能力

配接器是為了結合原來的能力,適配新的介面服務,比如適配不同的協議入口,作業的時候,其實需要適應不同的人和事,有不同的作業方法方式,但是我們的核心能力是一樣的,都是解決對應的問題域,

 

 

 

橋接(Bridge):合理關系

橋接模式是將原來相互依賴的部分,通過上層介面再往抽象層提一下,減少類之間的直接合作,形成間接關系,這個到對應到作業中來說,有一種場景是,常常開發對開發去case by case解決問題,如果往產品邏輯層走一下,開發對產品,產品層面可能有更好的抽象,當然為了更好的服務體驗,這樣的解耦是不多見的,但是這樣的思考我們可能要get一下,

 

 

 

組合(Composite):遞回思考

組合模式通過繼承和孩子節點,可以遞回地去描述一個物件層次,這個對我們作業來說,要加深思考的層次,可以某個點拆開去再去思考,同時如果能夠在遞回分解程序中抽象一些共性的點,就能找到一些規律,比如我們的需求分解,每個需求可以分解為子需求,子需求再往下看又可以遞回分解,分解完之后,每個部分有這部分的owner去驅動他的下游,形成一個層次結構,

 

 

 

裝飾(Decorator):增量價值

裝飾模式是將原來的能力進行包裝,并提供新的行為,其實每次功能迭代,我們大多是在原來的基礎上添加新的功能,我們要定義好新的能力,首要前提是繼承、理解好原來的邏輯,這里還想提的是,很多時候,我們只看到了我們復用了龐大的基礎能力,但是也要看到我們在專案中增量的貢獻,這是我們的閃光點,不要把“擰螺絲”真的看成了擰螺絲,

 

 

外觀(Facade):深入淺出

外觀模式是說我們不需要理解復雜的系統,而是通過一個外觀去操作,這里我們的作業思路是,我們不用展示復雜的細節,我們要提供一些高層的理解,匯報如此,系統的包裝也是如此,就比如,服務功能孤立來看,可能很多、很雜,但如果有一個統一的站點去引導包裝,那么感徑訓好很多,也會看上去有點收口和聚焦的感覺,

 

 

享元(Flyweight):善于鏈接

享元模式是說,當我們已經存在一些內容的時候,可以通過快取復用,而不是重新創建,減少開銷,我們在作業中也要做好積累,但是更要做好快取的key,通過怎么樣的手段去鏈接到我們的作業中,是需要我們做好類目管理和持續積累的,

 

 

 

代理(Proxy):理解保護

代理是為了包裝一個類,對相關操作進行二次轉發或者進行一些管控,作業中來說,有些作業模式下,有時候我們可能會抱怨管理者代理了我們的決策等操作,但是換個角度想,他們保護了你不用直接被暴露在業務方側,能夠按照預期內的節奏提供服務,不會被主動設定一些預期外操作或私活,

 

 

行為型模式 11

 

責任鏈(Chain of Responsibility):能力與責任

責任鏈是說將請求讓佇列內的處理器一個個執行,直到找到可以執行的,這里對我們作業的啟示是,我們常常抱怨我們得到的機會少,不能成為佇列內優先可以處理的處理器,總是處理人家不需要的,但是換個角度看,首先責任鏈里面的處理器應該是正交的,大家應該各司其職,退一步來說,如果真的有重疊,那么你應該努力提升自己,成為能力強的,從而提高佇列內的優先級,

 

 

命令(Command):加強合作

 

命令模型是說將請求包裝為命令,這樣在執行的時候可以與具體的執行邏輯解耦,作業中來說,我們有時候不應該太關心一個事情是怎么完成的,當交給別人完成時,信任他們即可,就是從解決問題的角度來看,不用事事親為,事事較真,但是這并不妨礙我們主動養成全域視角,了解每個細節,合作才能影響更多的事情,

 

 

 

解釋器(Interpreter):加強理解

 

解釋器模式是說針對一套背景關系,形成一套語言,可以通過解釋運算式含義的方式完成對應的任務,這里來說,我們可以形成某個團體的領域語言,內部交流通過相關領域語言交流,可以增加交流效率,此外,其實不同層次都有不同層次的專業術語,有時候一個術語的解釋是一個方面的頓悟,還是要多了解作業內容本身,

 

 

迭代器(Iterator):橫向職責

 

迭代器模式是將集合的訪問功能獨立出來,通過迭代的模式去訪問,這種獨立職責的操作,作業中我們常常會看到,我們會將需求管理,缺陷管理,資金安全的一些事情獨立出來看,一個方面是這些功能塊從主體來說是比較內聚的,另一個來方面說,對作業職責的細分,可以讓大家把自己的事情干好,發揮團隊作戰的效能:開發把開發干好,測驗把測驗干好,資損防護同學把資損防護干好,整體也就做好了,

 

 

中介者(Mediator):協調能力

 

中介模式是說:當多個類之間要協調的時候,往往引入中介者進行協調,減少大家的知識成本,這個我們常常需要一些PM、PMO這樣的角色去管理專案,系統中也需要一些協調層去協調各個域,因此我們也注重培養協調事務、具備全域觀的能力,

 

 

備忘錄(Memento):小步快跑

 

備忘錄模式是對操作的一些記錄,已被可以恢復到之前的版本,在日常作業中,我們常常需要及時備份、及時保存、及時提交等操作,這樣在程式崩潰的時候可以快速恢復到之前版本,但從抽象來說,一些比較長時費力的事情,我們應該分解來做,及時鎖住部分收益,

 

 

觀察者(Observer):主觀能動性

 

觀察者模式是說我們通過注冊、回掉這樣的協作設計,完成變化通知的協作機制,這個作業中來說,換個角度思考,我們可以將一些被動的作業,變成主動的思考,比如:我需要干某部分作業,從作業的角度來說,不得不做,從主動的角度來說,就是需要培養某塊的能力,如果對作業內容不太滿意,也可以溝通協調,而不是事后爆發,凡是都是可以主觀驅動的,

 

 

狀態(State):管理自己

 

狀態模式是說在不同的狀態下,有不同的處理行為,對作業中來說,我們可能有狀態好的時候,有狀態不好的時候,主觀的處理的手段是調整狀態,但是如果調整不過來,我們應該進行不同的操作,比如,腦子好的時候,想一些復雜問題;腦子嗡嗡的時候,做一些簡單整理,

 

 

策略(Strategy):理解決策

 

策略模式是說完成一個事情有不同的演算法,可以進行相關切換,我們在作業中,常常會提供不同的方案,不同的方案有不同的成本和收益,但是這些方案的選擇時候,往往不是我們能決定的,而是客戶client主動判斷的,

 

 

模板(Template):標準化能力

 

模版模式是說對一個執行程序進行抽象分解,通過骨架和擴展方法完成一個標準的主體邏輯和擴展,我們很多時候,做xxx平臺也都是這樣的:對程序進行標準化,對變化進行定義,形成一個平臺邏輯和業務擴展,完成一個產品模版,只是說這個模版是站點,還是擴展點,還是其他的展示形式,這樣標準化的能力也是需要長期訓練的,

 

 

訪問者(Visitor):學會放手

 

訪問者模式是說把對元素的訪問操作交給訪問者來操作,因為對訪問者來說常常有不同的訪問行為,在作業中,往往我們只能陳述事實,這個內容消化后,每個人都有自己的理解,代碼協作也是一樣,比如:頁面到底長什么樣,其實還是要交還給業務本身,我們應該專注于提供基礎的能力,

 

 

 

總結

作為開發者,我們對于如何寫出優雅的代碼,表示疑惑,因為常常背后是復雜的問題域,優雅的設計往往產生于區域,很難整體都很優雅,作為作業者,我們對于如何做出好的表現,表示疑惑,因為背后常常是綜合素質與機遇的結合,好的結果往往產生于一個階段,長期需要較快且持續的成長,但是,如果我們有一些指導性的原則,往往我們能夠明白事務的折中點,做出更加合理的設計,以及更加關鍵的貢獻,

 

 

  作者丨閔大為(天未)

本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/Talk-about-23-design-patterns-in-my-work.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536248.html

標籤:其他

上一篇:談談我作業中的23個設計模式

下一篇:“當時”與“當前”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more