中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Java知識點中的常見設計模式

發布時間:2021-11-20 15:25:01 來源:億速云 閱讀:149 作者:柒染 欄目:軟件技術

這期內容當中小編將會給大家帶來有關如何理解Java知識點中的常見設計模式,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一. 觀察者模式

觀察者模式用一句話描述就是當一個類的對象(被觀察者)的狀態發生改變時同時其他依賴于它的對象(觀察者)的狀態也做相應的改變(做相應的動作)。

具體實現流程:

  • 定義觀察者抽象類,該抽象類中有一個被觀察者的成員變量,還有一個update方法用于在被觀察者發生改變時通知觀察者類,實例化觀察者類時將被觀察者實例傳遞進來,這樣當被觀察者調用觀察者的update方法后觀察者就可以通過自己的被觀察者成員變量訪問到被觀察者改變之后的狀態

  • 定義被觀察者,其含有一個list,用來存儲若干個觀察者的實例,暴露出增加、刪除編輯觀察者的方法,當其狀態發生改變時遍歷調用list中觀察者對象的update方法通知觀察者們

java在java.util庫里面,提供了一個Observable類和一個Observer接口,在Observer接口中只提供了一個update方法,被觀察者通過調用該方法通知觀察者自己的狀態發生了改變。Observable類我們提供了對于觀察者添加,刪除,通知觀察者改變等方法。當我們的需要通知觀察者并且需要調用觀察者update方法,我們需要調用setChanged方法。

在Android中對于觀察者模式使用的場景有很多。例如BroadcastReceiver,Eventbus,RxJava等等都采用了觀察者模式。

二. 適配器模式

作為兩個不兼容的接口之間的橋梁,它結合了兩個獨立接口的功能。 這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。 注意,要點是要在原來類的基礎上使原本不兼容的功能變得兼容。 Adapter類一般是用來實現與原有類不兼容的功能,比如demo中的MediaAdapter實現了MediaPlayer沒有的特殊功能,用戶只要調用AudioPlayer中的play方法,AudioPlayer會自動根據音頻的類型選擇不同的play方式,當音頻類型不符合傳統player的能力時AudioPlayer會使用adapter去調用之前不兼容的方法(功能),這樣就實現了所謂的適配。

三. 代理模式

具先實現其實也很簡單,就是一個代理類將別代理類包裹起來,只對外界暴露調用被代理類方法的方法,從而實現代理模式,需要特別注意的是代理模式和適配器模式的區別: 適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口 ,和裝飾器模式的區別: 裝飾器模式為了增強功能,而代理模式是為了加以控制 。

四. 工廠方法模式

工廠方法模式其實就是當一個類的實例化依賴于不同場景時需要使用的,比如上面demo,根據不同的形狀,實例化的Shape對象內部的實現邏輯不一樣,這時候就可以使用工廠方法模式,將類內部的實現細節隱藏起來,用戶只需要告訴工廠類自己需要什么情況下的產品,工廠就可以自動調用自己內部對應場景的代碼從而返回一個用戶需要的“產品”。

五. 抽象工廠模式

對比工廠方法模式,因為一個工廠只能生產一個產品,比如一個ShapeFactory只能根據不同情況實例化不同的Shape,那么當我們需要一整套的產品(比如形狀和顏色形成了一套產品)時使用工廠方法顯然就不能解決了,所以就需要抽象工廠模式,抽象工廠模式實際上是工廠的工廠,即其作用的目的是為了實例化不同的工廠,用戶再通過不同的工廠實例化不同場景下成套的產品。

六. 單例模式

單例模式通俗來講就是讓一個類在整個程序中只有一個對象。

七. 命令模式

命令模式實質上就是將命令抽象到一個具體的類中,即這個類是專門去執行某個命令的,比如demo中,SellStock就是專門執行sell這個命令的,當用戶需要sell的時候只要實例化SellStock然后excute就可以完成sell,還有一個比較常用的例子是GUI開發中按鈕(button)的作用,每一個按鈕都是一個對象,當用戶點擊某個按鈕后就會觸發一個相應的命令,用戶看到的是點擊按鈕產生效果,而代碼層面上是實例化的按鈕對象執行類似于demo中的excute方法完成自己的“命令”。

上述就是小編為大家分享的如何理解Java知識點中的常見設計模式了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳朔县| 余姚市| 藁城市| 措美县| 察雅县| 万载县| 金山区| 金昌市| 屏边| 濮阳县| 德化县| 康马县| 故城县| 蕲春县| 东乡族自治县| 舒兰市| 华宁县| 苗栗县| 浮山县| 即墨市| 西华县| 榆中县| 辛集市| 巴彦淖尔市| 长沙市| 察隅县| 镇坪县| 灵台县| 连山| 平顶山市| 南阳市| 洪雅县| 长乐市| 新绛县| 芜湖市| 河曲县| 翁牛特旗| 安达市| 肇源县| 星座| 霞浦县|