Java 五大原則

1、單一職責

不論是在設計類,接口還是方法,單一職責都會處處體現,單一職責的定義:我們把職責定義為系統變化的原因。所有在定義類,接口,方法的時候。定義完以后再去想一想是不能多于一個的動機去改變這個類,接口,方法。如果答案是肯定的,說明定義的類,接口,方法則多于一個職責。故違背單一職責,遇到這種情況應該重新細分職責,直到不會出現多種職責的類,接口方法為止(發現職責,并把那些職責相互分離)。單一職責的為最簡單的五種原則之一。在軟件設計的過程中處處體現。無處不在。

?

2、開閉原則

開閉原則是指類、模塊、方法是可以擴展的,但不可以修改。開即對擴張開放,閉即對修改關閉。開閉原則的應用體現在,開發人員應該僅僅對程序中頻繁出現變化的地方進行抽象(封裝變化點)。對變化點的封裝即對變化的修改關閉。對于變化的不確定性,可隨時擴展。即 繼承的使用。抽象類的運用。

?

3、替換原則(Is-A)

替換原則即是總是保證子類可以替換它的基類。替換原則的實現。對于一組具有類似屬性,方法,變量的類。我們可以提取公共屬性,方法,變量做為一個基類(抽象類或者類),使這一組類繼承基類,重寫虛方法。現在這些繼承的類和基類的關系符合Is-A。如基類為鳥,則繼承類可以為麻雀,燕子。我們可以說麻雀Is-A鳥,燕子Is-A鳥。在項目中所有使用子類的地方都可用父類替換,但在調用方法的時候 ,即呈現面向對象編程的多態性。即替換原則,非常重要的原則,也是比較對難的原則。

?

4、依賴倒置原則

a、高層模塊不應該依賴于低層模塊。二者都應該依賴于抽象b、抽象不應該依賴于細節。細節應該依賴于抽象。在面向過程的開發語言中分析和設計,總是創建一些高層模塊去調用低層模塊、策略依賴于細節的軟件結構。實際上這種方法的目的就是要定義子程序層次結構,該結構 描述了高層模塊怎樣調用低層模塊。而設計良好的面向對象的程序,正好“倒置”了這種依賴關系。高層模塊不再依賴于低層模塊,從而低層模塊的修改不會影響到高層模塊,并且高層模塊也是能非常容易的被重用,高層模塊和低層模塊都影響都依賴于抽象。這樣也非常符合強內聚松耦合的編程思想。故該原則也是框架設計的核心原則。使用傳統的過程化程序設計所創建出來的依賴關系結構,策略是依賴于細節的,這是糟糕的,因為這樣會使策略受到細節改變的影響,面向對象的程序設計倒置了依賴關系結構,全程細節和策略都依賴抽象,并且常常是客戶程序擁有服務接口。事實上,這種依賴關系的倒置正是好的面向對象設計 的標志所在,使用何種語言來編寫程序是無關緊要的。如果程序的依賴關系是倒置的,它就是面向對象的設計。如果程序的依賴關系不是倒置的,它就是過程化的設計。依賴倒置原則是實現許多面向對象技術所宣稱的好處的基本低層機制。它的正確應用對于創建可重用的框架來說是必需的。同時它對于構建在變化面前富有彈性的代碼也是非常重要的,由于抽象和細節彼此隔離,所以代碼也非常容易維護。

?

5、接口隔離原則

應該說該原則是處理現有“胖”接口所存在的缺點。如果類的接口不是內聚的,就表示該類具有“胖”接口。換句話說“胖”接口可以分解成多組方法。每一組方法都服務于一組不同的客戶程序。這樣,量引客戶程序可以使用一組成員函數,而其他客戶程序可以使用其他組的成員函數。接口隔離的方法有兩種(分享客戶就是分離接口):1、使用委托(此委托非.net委托[delegate])分離接口使用委托即,創建一個委托類,用此類去實現分離后的其它接口中的方法。2、使用多重繼承分離接口、此方法,即將現有“胖”接口分成供不同客戶程序調用的兩個或多個接口,而需要實現多個接口的客戶程序,則使用多重繼承來實現。這兩種方法是實現接口隔離的全部方法,其中第二種方法使用較普遍,也比較簡單。而第一種方法使用起來相對比較復雜,而且在使用委托的過程中也會產生重復的對象,則占用運行時間和內存開銷。有的時候第二種方法是必須的,第一種方法是不能使用的。如:利用委托對象所做的轉換是必需的,或者不同的時候會需要不同的轉換。

?

轉載于:https://www.cnblogs.com/xiluhua/p/9276927.html

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

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

相關文章

馬化騰發飆:很多業務該砍就砍,一批員工要被裁了

最近騰訊內部會議,馬化騰內部講話,頻頻上了熱搜。在會議中,馬化騰難得發飆表示:很多不盈利的業務該砍就砍。從網絡新聞報道來看,可能超過40個業務即將關掉,甚至包括幻核、QQ影音、看點快報、搜狗地圖、騰訊…

在ASP.Net和IIS中刪除不必要的HTTP響應頭

引入 每次當瀏覽器向Web服務器發起一個請求的時,都會伴隨著一些HTTP頭的發送.而這些HTTP頭是用于給Web服務器提供一些額外信息以便于處理請求。比如說吧。如果瀏覽器支持壓縮功能,則瀏覽器會發送Accept-Encoding HTTP頭,這樣一來服務器便知道…

SAP Customer Data Cloud(Gigya)的用戶搜索實現

我在Gigya前臺根據email搜索,輸入一個郵箱地址,回車,在Chrome開發者工具里觀察到到后臺的網絡請求: 這是一個post請求: __RequestVerificationToken 請求體: {"query":"SELECT * FROM accou…

C# ComboBox枚舉量綁定的 兩種方法

概述ComboBox綁定枚舉量的方法有很多&#xff0c;今天列舉比較常用的兩種&#xff0c;希望對讀者們一些幫助&#xff01;代碼講解前臺XMAL:<StackPanel><ComboBox Name"EvenType1" SelectedIndex"0" Margin"5"/><ComboBox Name&…

springboot + mybatis + gradle項目構建過程

1.從Spring boot官網根據需求下載腳手架或者到GitHub上去搜索對應的腳手架項目,D_iao ^0^ ? 文件目錄如下&#xff08;此處generatorConfig.xml 和 log4j2.xml文件請忽略&#xff0c;后續會講解&#xff09; 2.使用Mybatis代碼自動構建插件生成代碼 ? gradle 相關配置 // My…

基于間隔推送全量更新數據狀態的設計方法

2019獨角獸企業重金招聘Python工程師標準>>> 假如有個直播間&#xff0c;在數據有更新的時候&#xff0c;能及時反映在客戶端上。通信方式來說&#xff0c;有兩種&#xff1a; 1、拉取模式。 2、推送拉取模式&#xff08;或者純推送&#xff09; 拉取模式&#xff0…

Redis 哈希(Hash)

哈希hash又稱為散列、雜湊等&#xff0c;是將任意長度的輸入通過散列算法變換為固定長度的輸出&#xff0c;最終輸出也就是哈希值。這種轉換是一種壓縮映射。也就是說&#xff0c;散列值的空間通常要遠小于輸入控件&#xff0c;不同的輸入可能會散列成相同的輸出&#xff0c;所…

京東Vue組件庫NutUI 2.0發布:將支持跨平臺!

NutUI 是一套來自京東用戶體驗設計部&#xff08;JDC&#xff09;前端開發部的移動端 Vue 組件庫&#xff0c;NutUI 1.0 版本于 2018 年發布。據不完全統計&#xff0c;目前在京東至少有30多個 web 項目正在使用 NutUI。 經過一段時間緊鑼密鼓的開發&#xff0c;近期&#xff0…

macbook 下載時睡眠_MacBook進入睡眠狀態時如何自動使其靜音

macbook 下載時睡眠You open your MacBook to take notes in class or during a meeting, and your music starts playing. Loudly. Not only did you disrupt everyone, you also revealed your passion for 90’s boy bands to a room full of people who once respected you…

Mac 的mysql5.7沒有配置文件,如何解決only_full_group_by 問題

數據庫版本是5.7.19&#xff0c;在寫語句的時候&#xff0c;只要涉及ORDER BY,就會報錯&#xff0c; ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column postscan.verifyDelayLog.auditor which is not function…

Spring MVC 入門(一)

什么是 Spring MVC 學習某一樣東西之前&#xff0c;我們一定要大致知道這個東西是什么&#xff0c;能干什么&#xff0c;為什么要用它。 Spring MVC 是一個開源平臺&#xff0c;一個基于 Spring 的 MVC 框架&#xff0c;它支持基于 Java 開發 Web 應用程序。MVC 架構很利于開發…

開源網關 Apache APISIX 認證鑒權精細化實戰講解

關注公眾號并添加到“星標?”&#xff0c;防止錯過消息后臺回復【資料包】獲取學習資料GitOps 新手入門到專家進階實戰詳細教程作者錢勇&#xff0c;API7.ai 開發工程師&#xff0c;Apache APISIX Committer在當下云原生越發成熟的環境下&#xff0c;API 網關最核心的功能可以…

python應用POP3、IMAP、SMTP 協議,獲取郵箱驗證碼

&#xff30;&#xff2f;&#xff30;&#xff13;和&#xff29;&#xff2d;&#xff21;&#xff30;是郵件相關的協議&#xff0c;&#xff29;&#xff2d;&#xff21;&#xff30;是比&#xff30;&#xff2f;&#xff30;&#xff13;更高級一點的協議&#xff0c;實…

固件中啟用的虛擬化否_哪些固件或硬件機制可啟用強制關機?

固件中啟用的虛擬化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

簡述閉包

閉包 這是我對閉包的一點小理解.有問題請直接指出,在此先謝過! 閉包的含義 封閉隔離的空間,在javascript中,只有函數能夠符合這種特性; 為什么要用閉包呢? 因為在引用外部js文件(如jquery,各種框架)時防止變量重名造成的問題,同時也使代碼更具隱私性; 獲取閉包中數據的方法: …

Confluence 6 配置服務器基礎地址備注

使用不同 URL。如果你配置了不同的基礎 URL 地址或者你站點的訪問者使用了不同的 URL 地址來訪問你的 Confluence 地址&#xff0c;你有很大概率可能會受到錯誤信息。修改上下文地址。如果你修改了基礎 URL 地址的上下文地址&#xff0c;你同時也需要修改下面的配置&#xff1a…

2019第10周知識總結

react 事件綁定 函數寫法 文檔總結 https://react.docschina.org/docs/handling-events.html 1 通過 constroucor綁定 class Toggle extends React.Component {constructor(props) {super(props);this.state {isToggleOn: true};// This binding is necessary to make this wo…

.NET 云原生架構師訓練營(基于 OP Storming 和 Actor 的大型分布式架構二)--學習筆記...

▲ 點擊上方“DotNet NB”關注公眾號回復“1”獲取開發者路線圖學習分享 丨作者 / 鄭 子 銘 這是DotNet NB 公眾號的第202篇原創文章目錄為什么我們用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念結合 OP Storming 的實踐結合 OP Storming 的實踐業務模型設計模型代…

PHP 多維數組轉json對象

PHP 多維數組轉json對象 php 數組轉json對象&#xff0c;可能大家都知道要用json_encode,但是轉換出來的格式多有不同&#xff0c;此處做個小小的記錄&#xff01; 1. 一維數組轉json對象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微軟文本檢索_如何在Microsoft Word中引用其他文檔中的文本

微軟文本檢索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…