邁出從3K到1W的重要一步——掌握設計模式

IT職場的小菜經常有這樣的疑問:

??????? 為什么一個相似的功能,大牛一會兒就搞定,然后悠閑地品著下午茶逛淘寶;而自己加班加點搞到天亮還做不完。

??????? 為什么用戶提出需求變更后,大牛只需瀟灑地敲敲鍵盤,改改配置;而自己將代碼改了又改,刪了又建,幾乎暈厥,最后只能推翻重來。

??????? 為什么大牛寫完的程序測試上線后,幾乎完美運行,用戶無懈可擊;而自己的程序bug重重,改好一個卻又引出另一個,按下葫蘆浮起瓢,幾近崩潰。

??????? 為什么同樣是程序員,大牛工資1W,而自己只能拿區區的3K?

??????? 大牛顯然知道一些小菜所不知道的秘密,這秘密又是什么呢?

??????? 這個秘密就是設計模式。設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。只有精通了設計模式,才敢說真正理解了軟件工程。可以說,設計模式是每一個架構師所必備的技能之一。作為一個面向對象設計程序員,只有精通了設計模式,才能完成自身價值從3K到1W的飛躍,才能擺脫碼奴的命運,成為一個真正的軟件工程師。

??????? 提到設計模式,不得不感謝GoF(Gang of Four,四人組),他們1995年出版的《設計模式》一書,第一次將設計模式提升到理論高度,并將之規范化。書中一共總結了23種基本的設計模式。而這23中設計模式幾乎涵蓋了面向對象設計過程中所有問題的解決方案。書中提到的23種設計模式分別是:

1.單例模式 2.工廠方法模式 3.抽象工廠模式 4.模版方法模式 5.建造者模式 6.代理模式 7.原型模式 8.中介者模式 
9.命令模式 10.責任鏈模式 11.裝飾模式 12.策略模式 13.適配器模式 14.迭代器模式 15.組合模式 16.觀察者模式 
17.門面模式 18.備忘錄模式 19.訪問者模式 20.狀態模式 21.解釋器模式 22.享元模式 23.橋梁模式

??????? 那么如此多的設計模式又是從何而來呢?《易經》有云:“易有太極,是生兩儀,兩儀生四象,四象生八卦”,意思就是說世界萬物皆有起源。而設計模式的起源是面向對象程序設計思想,是面向對象設計的精髓——抽象。面向對象通過類和對象來實現抽象,實現時產生了面向對象的三個重要機制:封裝、繼承、多態。正是這三個機制衍生出了各種各樣的設計模式。在面向對象軟件設計的發展過程中,除了《設計模式》一書中提到的23中設計模式之外,新的設計模式仍然不斷出現。

??????? 從面向過程到面向對象是軟件設計誕生以來的邁出的最偉大的一步,面向對象程序設計成功解決了面向過程軟件編程的低效率問題,并且徹底改變了人們的編程思維,為軟件設計揭開了新的篇章。然而,要實現面向對象設計,徹底擺脫面向過程設計思維,并不僅僅是只要使用了一門面向對象的編程語言就能夠達到的。使用面向對象設計,可以設計出優秀的軟件,同樣也可以設計出糟糕的軟件。只有遵循一些特定的原則,才能設計出復用性高靈活性好的軟件來。

在運用面向對象的思想進行軟件設計時,需要遵循的原則一共有6個,他們是:

1.??單一職責原則(Single?Responsibility?Principle)
2.??里氏替換原則(Liskov?Substitution?Principle)
3.??依賴倒置原則(Dependence?Inversion?Principle)
4.??接口隔離原則(Interface?Segregation?Principle)
5.??迪米特法則(Low?Of?Demeter)
6.??開閉原則(Open?Close?Principle)

??????? 在軟件設計的過程中,只要我們盡量遵循以上六條設計原則,設計出來的軟件一定會是一個優秀的軟件,它必定足夠健壯、足夠穩定,并以極大的靈活性來迎接隨時而來的需求變更等因素。當完全明白這六個原則的含義時,小菜便完成了走向大牛的蛻變。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453004.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用pip安裝virtualenv時出現問題

使用pip出現問題 fxd0ubuntu:~$ sudo pip install virtualenv [sudo] password for fxd0: env: ‘pip’: No such file or directory fxd0ubuntu:~$ pip insatall virtualenv Command pip not found, but can be installed with: sudo apt install python-pip 安裝pip fxd0…

jquery 獲取 outerHtml 包含當前節點本身的代碼

在開發過程中,jQuery.html() 是獲取當前節點下的html代碼,并不包含當前節點本身的代碼,然后我們有時候確需要,找遍jQuery api文檔也沒有任何方法可以拿到。 看到有的人通過parent().html(),如果當前元素沒有兄弟元素還…

擁塞控制中的開環和閉環控制

擁塞控制是很難設計的,因為它是一個動態的問題,許多情況下,甚至正式擁塞控制機制本身成為引起網絡性能惡化甚至死鎖的原因。從控制理論的角度來看擁塞控制這個問題,可以分為開環控制和閉環控制兩種方法。開環控制就是在設計網絡時…

c語言編寫一個菜單系統_一招教你,輕松解決C語言編寫一個正整數的所有因子!...

這個實例是一個能提高分析能力的實例,這個實例主要用到for語句,關鍵是如何確定其中變量的范圍。求一個正整數的所有因子先來看看編程結果演示:編程演示輸出結果編程如下:#include/*引用預處理命令,預處理包含stdio.h的頭文件*/mai…

【簡明筆記】循環條件的優化

[javascript] view plaincopy/* * 優化循環 */ //優化前 for(var i0; i < items.length; i){ //判斷條件&#xff1a;(1)i<items.length; (2)i<items.length true; process(items[i]); } //優化后 var count items.length; //把length屬性放在局…

ubuntu18.04安裝mysql數據庫

mysql安裝參考&#xff1a; https://www.cnblogs.com/opsprobe/p/9126864.html 文中寫的很詳細&#xff0c;但是未進行初始密碼的修改&#xff0c;初始密碼修改參考文章&#xff1a; https://blog.csdn.net/qq_38737992/article/details/81090373

第四次Scrum編碼沖刺!!!!

第四次Scrum編碼沖刺&#xff01;&#xff01;&#xff01;&#xff01; 一、總體任務&#xff1a; 本次沖刺是完成對圖書館管理系統的最后三個功能的實現------管理員對用戶授權、用戶注銷和用戶查詢 二、個人任務及完成情況&#xff1a; 本人本次的任務是實現對刪除用戶功能以…

Spring Cloud Edgware新特性之八:Zuul回退的改進

為什么80%的碼農都做不了架構師&#xff1f;>>> Spring Cloud Edgware對Hystrix回退的邏輯進行了一些改進。本文將信息探討新舊版本的回退操作&#xff0c;并分析的原因及改進后的優勢。 Dalston及更低版本 對于Dalston及更低版本&#xff0c;要想為Zuul提供回退&a…

因特網 以太網 互聯網的含義及區別

互聯網是Internet的意譯&#xff0c;因特網是Internet的音譯&#xff0c;兩者是等同的&#xff0c;是一個全世界范圍的廣域網。目前應用最為廣泛的一類局域網是總線局域網-以太網。以太網的核心技術是它的隨機爭用型介質訪問控制方法&#xff0c;即帶有沖突檢測的載波偵聽多路訪…

idea插件導出_Intellij IDEA 中我一直在用的幾個插件

提前聲明一下&#xff0c;今天這篇文章是在我家的那臺 Mac 機子上寫的&#xff0c;但是文中使用的快捷鍵還是主要針對于 Windows 平臺「由于我的大多數讀者在使用該系統&#xff0c;我是有多么愛你們&#xff5e;&#xff5e;&#xff5e;」。接上一篇《談談我與 Intellij IDEA…

打開.md格式文件的方式

我們平常偶爾會收到后綴為*.md的文件&#xff0c; md是簡稱&#xff0c;它的全名為MARKDOWN。MARKDOWN是一種標記語言軟件&#xff0c;下載安裝MarkdownPad2即可打開。 具體安裝參考文章&#xff1a;MarkdownPad2安裝漢化與注冊碼 https://blog.csdn.net/weixin_40612082/art…

吃透理財三句話人人都能成百萬富翁

財專家告訴我們&#xff1a;理財的最佳方式并非追求高超的金融投資技巧&#xff0c;只要你掌握正確的理財觀念&#xff0c;并且持之以恒&#xff0c;若干年之后——人人都能成為百萬富翁。我每月到企業舉辦一小時的免費“理財講座”&#xff0c;一直都很受員工們的歡迎。講座內…

Apache - Storm

一、Apache Storm Storm是一個分布式的&#xff0c;可靠的&#xff0c;容錯的數據流處理系統。Storm集群的輸入流由一個被稱作spout的組件管理&#xff0c;spout把數據傳遞給bolt&#xff0c;bolt要么把數據保存到某種存儲器&#xff0c;要么把數據傳遞給其它的bolt。一個Stor…

Python基礎學習五 內置模塊

time 模塊 1 >>> import time2 >>> time.time()3 1491064723.8086694 >>> # time.time()返回當前時間的時間戳timestamp(定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數)的方法,無參數5 >>> time.asctime()6 Sun Apr 2…

如何在windows上將本地項目上傳到Github

詳細步驟參考&#xff1a; https://www.cnblogs.com/smfx1314/p/8426115.html 感謝作者分享&#xff01;

Sublime Text3使用Package Control 報錯There Are No Packages Available For Installation

在使用sublime時&#xff0c;有時候我們希望將代碼復制出來后仍然是高亮顯示&#xff0c;這樣我們便需要安裝SublimeHighLight插件&#xff0c;在安裝SublimeHighLight插件之前&#xff0c;我們應該先安裝Package Control插件&#xff01; 1、Package Control插件作用&#xff…

數據結構學習筆記

數據結構學習筆記&#xff08;一&#xff09; 假期以來我都堅持每天看一點郝斌的數據結構視頻。講的很透徹&#xff0c;也很風趣。 前幾天都是為講數據結構而做準備&#xff0c;講了一些結構體和指針&#xff0c;今天終于開始正式將數據結構。說實話&#xff0c;我今天才知道…

2018-1-27:內存的劃分

內存的劃分 1.寄存器 2.本地方法區 3.方法區 4.棧內存 存儲的都是局部變量&#xff0c;變量的作用域一結束&#xff0c;該變量就立即釋放 5.堆內存 存儲的是對象&#xff0c;即凡是new的都在堆中 特點&#xff1a;   1.每一個實體都有首地址 2.堆內存中每一個變量都有默認初始…