設計模式的六大原則

設計模式是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更加容易被他人理解、保證代碼可靠性。設計模式是代碼編制真正工程化(工程化即系統化、模塊化、規范化的一個過程。指將具有一定規模數量的單個系統或功能部件,按照一定的規范,組合成一個模塊鮮明、系統性強的整體),是軟件工程的基石。

從新的角度對常用的23種設計模式分類:
接口型模式:適配器模式(Adapter)、外觀模式(Facade)、組合模式(Composite)、橋接模式(BridgePattern)
責任型模式:責任鏈模式(Chain of Responsibility)、單例模式(Singleton)、觀察者模式(Observer)、中介者模式(Mediator)、代理模式(Proxy)、享元模式(Flyweight)
構造型模式:生成器模式(Builder Pattern)、工廠方法模式(Factory Pattern)、抽象工廠模式(Abstract Factory Pattern)、原型模式(Prototype Pattern)、備忘錄模式(Memento Pattern)
操作型模式:模板方法模式(Template Method)、狀態模式(State Pattern)、策略模式(Strategy Pattern)、命令模式(Command Pattern)、解釋器模式(Interpreter?Pattern)
擴展型模式:裝飾器模式(Decorator)、迭代器模式(Iterator)、訪問者模式(Visitor)
總原則-開閉原則
對擴展開放,對修改封閉。在程序需要進行拓展的時候,不能去修改原有的代碼,而是要擴展原有代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。
想要達到這樣的效果,我們需要使用接口和抽象類等。
?
1、單一職責原則
不要存在多于一個導致類變更的原因,也就是說每個類應該實現單一的職責,否則就應該把類拆分。
?
2、里氏替換原則(Liskov Substitution Principle)
任何基類可以出現的地方,子類一定可以出現。里氏替換原則是繼承復用的基石,只有當衍生類可以替換基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。
里氏代換原則是對“開-閉”原則的補充。實現“開閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。里氏替換原則中,子類對父類的方法盡量不要重寫和重載。因為父類代表了定義好的結構,通過這個規范的接口與外界交互,子類不應該隨便破壞它。
?
3、依賴倒轉原則(Dependence Inversion Principle)
面向接口編程,依賴于抽象而不依賴于具體。寫代碼時用到具體類時,不與具體類交互,而與具體類的上層接口交互。
?
4、接口隔離原則(Interface Segregation Principle)
每個接口中不存在子類用不到卻必須實現的方法,如果不然,就要將接口拆分。使用多個隔離的接口,比使用單個接口(多個接口方法集合到一個的接口)要好。
?
5、迪米特法則(最少知道原則)(Demeter Principle)
一個類對自己依賴的類知道的越少越好。無論被依賴的類多么復雜,都應該將邏輯封裝在方法的內部,通過public方法提供給外部。這樣當被依賴的類變化時,才能最小的影響該類。
最少知道原則的另一個表達方式是:只與直接的朋友通信。類之間只要有耦合關系,就叫朋友關系。耦合分為依賴、關聯、聚合、組合等。我們稱出現為成員變量、方法參數、方法返回值中的類為直接朋友。局部變量、臨時變量則不是直接的朋友。我們要求陌生的類不要作為局部變量出現在類中。
?
6、合成復用原則(Composite Reuse Principle)
盡量首先使用合成/聚合的方式,而不是使用繼承。
?

?

轉載于:https://www.cnblogs.com/Vam8023/p/8463913.html

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

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

相關文章

作業7

stuNum 201709090072 print(年級是:stuNum[0:4]) print(專業編號是: stuNum[4:9]) print(序號是: stuNum[-3:]) stuNum 440982201812111876 print(所在省市:stuNum[0:2]) print(所在地區:stuNum[2:4]) print(所在縣區:stuNum[4:…

linux進程退出沒有log,Linux下應用進程消失原因分析-Go語言中文社區

應用部署在Linux環境下,如果出現未知原因導致應用進程被殺(應用日志中沒有任何異常現象,日志出現中斷現象),如果對于進程消失原因沒有特別明確的方向,可以考慮從系統日志(/var/log/messages)方面查找原因。 命令參考egrep -i kill…

數學是成就卓越開發人員的必備技能

編者按:原文作者Alan Skorkin是一名軟件開發人員,他在博客中分享對軟件開發相關的心得,其中有很多優秀的文章,本文就是其中一篇,作者認為:成為優秀的開發人員,可以沒有數學技能,但成…

Flask愛家租房--celery(總結)

0. celery整體邏輯圖 個人理解為:此處的客戶端client與以往定義的客戶端(前端)并不一樣,角色相當于以往的后端邏輯處理代碼,即發布任務的一方,只是相當于處理者worker而言是客戶端。 1.準備工作&#xff1…

linux端口514啟動,Linux查看端口使用狀態及啟動(示例代碼)

Netstat -tln 命令是Linux查看端口使用情況/etc/init.d/vsftp start 是用來啟動ftp端口~!看文件/etc/servicesnetstatLinux查看端口查看已經連接的服務端口(ESTABLISHED)netstat -aLinux查看端口查看所有的服務端口(LISTEN,ESTABLISHED)sudo netstat -ap…

window服務器開站點(不通用)

此文章為記錄自己的配置流程,其他人不通用 網站服務器:Windows server 2008 R2 (IIS6.1) Asp.net 數據庫服務器:Windows server 2008 R2 SQL Server 2008 R2 1.解析域名到服務器,如:www.test.com 2.登錄網站服務器&a…

【轉載】優秀文章轉載集合

Spring Spring Cache 注釋驅動的 Spring cache 緩存介紹使用 Spring 2.5 注釋驅動的 IoC 功能虛擬化 libvirt kvm 虛擬機上網 – Bridge橋接KVM詳解,太詳細太深入了,經典Tomcat Linux機器同時運行兩個tomcat點評:主要是那張圖片的配置 Nginx …

Flask愛家租房--celery(發送驗證短信)

0.配置文件 # coding:utf-8BROKER_URL "redis://127.0.0.1:6379/1" CELERY_RESULT_BACKEND redis://127.0.0.1:6379/21.啟動文件 # coding:utf-8from celery import Celery from ihome.tasks import config# 定義celery對象 celery_app Celery("ihome"…

理論與實踐:不要過度思考

你每天都在仔細翻閱Hacker News,驚奇于那些經過整理的創業傳奇、功效無比的最佳實踐理論、天才的技術解決方案,以及各種鏈接指向的大量的一站式的,極簡主義的,色彩柔和的網站。你參加過精益(Lean)創業研討會,讀過了《F…

linux我如何查看一個腳本的路徑,linux獲取shell腳本所在絕對路徑操作介紹

腳本名:a.sh位置:/tmp/whuang/study/java腳本內容:復制代碼代碼如下:#!/bin/shthis_dirpwddirname $0|grep "^/" >/dev/nullif [ $? -eq 0 ];thenthis_dirdirname $0elsedirname $0|grep "^/." >/dev/nullretval$…

Go編程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比較常用的接口。很多原生的結構都圍繞這個系列的接口展開,在實際的開發過程中,你會發現通過這個接口可以在多種不同的io類型之間進行過渡和轉化。本文結合實際場景來總結一番。 總…

把base64轉為blob

let blob1 dataURItoBlob(this.img); 轉載于:https://www.cnblogs.com/miaSlady/p/9073550.html

Flask愛家租房--房屋管理(獲取房東發布的房源信息條目)

文章目錄0.效果展示1.重點總結2.后端代碼3.前端html4.前端js0.效果展示 1.重點總結 1)用戶點擊“我的房源”,頁面開始加載,此時myhouse.js限定只有完成實名認證的房東才可以查詢已有的房源信息,因此myhouse.js首先調用用戶認證的…

TCP如何利用不可靠的IP協議實現可靠傳輸

IP協議之所以是不可靠的是因為IP網絡存在沖突丟包及傳輸錯誤甚至被惡意篡改的情況;雖然IP協議是不可靠的,但其服務的上層協議為了規避這些不可靠的因素,有些協議就會自己設計機制從而保證自己傳輸的內容可靠;TCP就是其中之一&…

jsp通過include指令引入html亂碼的解決方法

本文轉自&#xff1a;https://blog.csdn.net/gnail_oug/article/details/51707061 在jsp中使用<%include file"in.html" %>導入html頁面時&#xff0c;如果html頁面里有中文&#xff0c;就會產生亂碼。檢查jsp文件和html文件的編碼&#xff0c;編碼一致&#x…

linux怎么刪干凈mysql,linux怎么干凈卸載mysql

1、查找以前是否裝有mysql命令&#xff1a;rpm -qa|grep -i mysql可以看到如下圖的所示&#xff1a;說明之前安裝了&#xff1a;MySQL-client-5.5.25a-1.rhel5MySQL-server-5.5.25a-1.rhel52、停止mysql服務、刪除之前安裝的mysql刪除命令&#xff1a;rpm -e –nodeps 包名# rp…

各大互聯網公司java開發面試常問問題

本人是做java開發的&#xff0c;這是我參加58&#xff0c;搜狐&#xff0c;搜狗&#xff0c;新浪微博&#xff0c;百度&#xff0c;騰訊文學&#xff0c;網易以及其他一些小的創業型公司的面試常被問的問題&#xff0c;當然有重復&#xff0c;弄清楚這些&#xff0c;相信面試會…

14種方法助你參與開源項目

導讀&#xff1a;每日[快訊精選]是由CSDN研發頻道推出的特色欄目&#xff0c;每一天我們將從國外技術媒體(例如Hacker News、Reddit...等等)中挑選出有價值的新聞簡訊&#xff0c;讓您在第一時間掌握業界主流的技術文摘&#xff0c;每天清晨為您獻上第一份技術早餐。 [1]Javac…