輕鬆理解-中高階java開發必知必會之 代理模式和裝飾模式
代理模式和裝飾模式分別是什麼?有什麼區別?
這兩個設計模式看起來很像。對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現同一個 介面。對代理模式來說,代理類(proxy class)和真實處理的類(real class)都實現同一個介面。此外,不論我們使用哪一個模式,都可以很容易地在真實物件的方法前面或者後面加上自定義的方法。
然而,實際上,在裝飾器模式和代理模式之間還是有很多差別的。裝飾器模式關注於在一個物件上動態的新增方法,然而代理模式關注於控制對物件的訪問。換句話 說,用代理模式,代理類(proxy class)可以對它的客戶隱藏一個物件的具體資訊。因此,當使用代理模式的時候,我們常常在一個代理類中建立一個物件的例項。並且,當我們使用裝飾器模 式的時候,我們通常的做法是將原始物件作為一個引數傳給裝飾者的構造器。
我們可以用另外一句話來總結這些差別:使用代理模式,代理和真實物件之間的的關係通常在編譯時就已經確定了,而裝飾者能夠在執行時遞迴地被構造。
用程式碼直觀的來看下:
代理模式:
代理的客戶(使用者):
裝飾模式:
但是比較容易區分的哈;
下篇順便再把單例模式給寫了吧
相關推薦
輕鬆理解-中高階java開發必知必會 之 二分查詢
二分查詢也叫折半查詢,二分查詢就是將查詢的鍵和子陣列的中間鍵作比較,如果被查詢的鍵小於中間鍵,就在左子陣列繼續查詢;如果大於中間鍵,就在右子陣列中查詢,否則中間鍵就是要找的元素 但是這個查詢必須要求陣列中的數字是有順序性的其實還有很多關於這個二分查詢的變種演算法,可以自行拓展下。 而且此演算法在
輕鬆理解 - 中高階java開發必知必會之 氣泡排序
其實氣泡排序演算法是非常經典的演算法,放在中高階開發中其實不太合適,但是實際工作後很少碰到這個氣泡排序演算法,漸漸地很多開發人員就開始遺忘了。 其核心思想就是將相臨近的值比較大小,大的放後面小的放前面,從人文角度來考慮好像不是很厚道啊,但是目的要做排序嘛~~ 此演算法求職面試的時候出鏡率又是
輕鬆理解 - 中高階java開發必知必會之 HashMap擴容機制
簡單的介紹和原始碼分析 先看put操作的原始碼: public V put(K key, V value) { //判斷當前Hashmap(底層是Entry陣列)是否存值(是否為空陣列) if (table == EMPTY_TABLE) {
輕鬆理解 - 中高階java開發必知必會 之 掌握 java阻塞隊(ArrayBlockingQueue與LinkedBlockingQueue)
在java開發中有些特殊場景下適用於阻塞佇列如: 多執行緒環境中,通過佇列可以很容易實現資料共享,比如經典的“生產者”和“消費者”模型中,通過佇列可以很便利地實現兩者之間的資料共享。假設我們有若干生產者執行緒,另外又有若干個消費者執行緒。如果生產者執行緒需要把準備好的資料共享給消費者執行緒,利用
輕鬆理解-中高階java開發必知必會之 事務@Transactional
事務,專案的重要部分,不可或缺。解決事務問題至關重要,即使出現異常情況,它也可以保證資料的一致性。。 在spring中對事務的操作有@Transactional註解去實現或者寫配置xml去實現,因為目前本人全面擁抱springboot框架,所以偏向於與註解的方式去實現; 一般我們會在serv
輕鬆理解-中高階java開發必知必會之 遇見最好的單例模式
什麼是單例模式? 單例模式確保某個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 很多教程裡都寫不好的寫法和好的寫法這裡我只介紹好的寫法; 使用語法糖是最好的寫法,站在巨人的肩膀上會減少很多問題 一、我們使用java的類級內部類和靜態初始化來保證單利模式的可行性:
輕鬆理解-中高階java開發必知必會之 代理模式和裝飾模式
代理模式和裝飾模式分別是什麼?有什麼區別? 這兩個設計模式看起來很像。對裝飾器模式來說,裝飾者(decorator)和被裝飾者(decoratee)都實現同一個 介面。對代理模式來說,代理類(proxy class)和真實處理的類(real class)都實現同一個介面。此外,不論我們使用哪一個
輕鬆理解-中高階java開發必知必會之 Callable和Runable
相對於Runable,Callable的出鏡率其實並不高,二者區別其實有限,下面是具體分析: 我們進行非同步執行的時候,如果需要知道執行的結果,就可以使用callable介面,並且可以通過Future類獲取到非同步執行的結果資訊。如果不關心執行的結果,直接使用runnable介面就可以了,因為它
輕鬆理解-中高階java開發必知必會之 依賴注入和控制反轉
關於Ioc和DI在網上隨便一搜都有很多,但是很多人的講解呢,就是讓人感覺深奧,看多了反而有些摸不清了,下面是我找到的一個利於理解的講解可以看下 Ioc (控制反轉) 首先想說說Ioc(Inversion of Control,控制反轉)。這是spring的核心,貫穿始終。所謂Ioc,對於
輕鬆理解-中高階java開發必知必會 之 三兄弟 HashMap ,HashTable ,ConcurrentHashMap
這段時間比較閒,可以把之前理解整理出來的文件不斷地挪到這上面來 言歸正傳: 在日常工作中 你會選擇hashMap 還是HashTable 還是ConcurrentHashMap 讓他們先來自我介紹吧: 首先HashMap和HashTable都實現了Map介面,但是HashTable是
介面卡模式 和 裝飾模式 個人的理解筆記
介面卡模式: interface Target{ public void request(); } class Adapter1{ public void specificRequest(){ system.out.println(" 這個是個特殊方法,要被包裝起來
中高階java開發必知必會之 氣泡排序
其實氣泡排序演算法是非常經典的演算法,放在中高階開發中其實不太合適,但是實際工作後很少碰到這個氣泡排序演算法,漸漸地很多開發人員就開始遺忘了。 其核心思想就是將相臨近的值比較大小,大的放後面小的放前面,從人文角度來考慮好像不是很厚道啊,但是目的要做排序嘛~~ 此演算法求職
Java開發人員必知必會的20種常用類庫和API
坐穩了沒?要開車了哦 一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:“建議使用現有的API來開發,而不是重複造輪子”。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必
深入理解Spring 之 Spring 進階開發必知必會 之 Spring 擴充套件介面
# 前言 我們在前幾篇文章中已經深入瞭解了 Spring 的 IOC 機制和 AOP 機制,在閱讀原始碼的同時,樓主對 Spring 中設計模式的運用可以說五體投地,還有我們還知道更重要的一點就是:Spring 留給了我們大量的擴充套件介面供開發者去自定義自己的
2018年最全網易微專業Java開發:聚焦Java開發工程師必知必會的知識技能
Object轉JsonString 如何使用:JSON.toJSONString(obj); 處理邏輯:JSON類是一個抽象類,實現了其中一個名為JSONAware的介面,這個介面中只有一個方法就是String toJSONString(),如下圖所示: 該方法
Java開發人員必知必會的常用類庫和API
一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:“建議使用現有的API來開發,而不是重複造輪子”。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裡不包括框架,如S
Java開發程式設計師必知的Java程式設計的10種錯誤
作為程式設計師在程式開發的過程中難免的要出現一些不是自己水平問題二出現的一些常見的錯誤。本文就為大家介紹一些常見在Java開發過程中遇見的一些常見的錯誤。 一、常見錯誤1:多次拷貝字串 測試所不能發現的一個錯誤是生成不可變(immutable)物件的多份拷貝。不可變物件是不可
Java必知必會:異常機制詳解
賦值 輸出結果 類庫 負數 虛擬 類名 通過反射 基於 all 一、Java異常概述 在Java中,所有的事件都能由類描述,Java中的異常就是由java.lang包下的異常類描述的。 1、Throwable(可拋出):異常類的最終父類,它有兩個子類,Error與Exce
mysql開發必知必會
目錄 etc 運用 win 字符集 發揮 mem follow type mysql的數據庫的數據庫,即存儲mysql數據庫的底層目錄,是在/var/lib/mysql目錄下(Linux,win在目錄下的data中)。 我們新創建的數據庫db1就是在/var/li
Java NIO 必知必會(Example)
管道流: Java NIO 管道是2個執行緒之間的單向資料連線。Pipe有一個source通道和一個sink通道。資料會被寫到sink通道,從source通道讀取。 1 package base.nio.threaddemo; 2 3 import java.io.IOExce