1. 程式人生 > >使用動態代理解決網站字符集編碼問題:(之前通過攔截器)

使用動態代理解決網站字符集編碼問題:(之前通過攔截器)

使用動態代理解決網站字符集編碼問題:(之前通過攔截器)

 

設計模式:

在軟體開發的過程中,遇到相識的問題,將問題的解決方式抽象為模型(套路)

單例模式(靜態程式碼只會執行一次),工廠模式,動態代理,裝飾者模式,介面卡

 

裝飾者模式的介紹:

谷歌汽車場景:

1. Java設計了汽車開發的約定

interface ICar(start,run,stop)

class GoogleCar implements ICar{}

2. 希望在將谷歌car接入生態圈時候,增強汽車啟動的功能

3.考慮的方向有:直接修改GoogleCar原始碼;使用繼承

4. 二次開發的時候如果無法獲得原始碼並且無法使用繼承,final class如果需要增強某個物件的一個方法的時候,要考慮裝飾者模式。

前提是:可以獲取到被裝飾 的物件GoogleCar實現的所有介面,(ICar)
實現思路:自定義裝飾類實現ICar介面,為自定義裝飾類傳遞被裝飾的物件(即:

main函式new的時候是這樣的

ICar car = new MyCar(new GoogleCar())

ICar介面:對外公開的

谷歌開發的car,原始碼不對外開放:

我自己開發的car,增加一個有參構造器,實現ICar

 

啟動main函式:記得構造器的引數要傳入GoogleC物件:

這個就是所謂的裝飾者模式。

 

 

裝飾者的弊端:如果被實現的介面方法太多,裝飾類中的方法過多冗餘

解決方法:

動態代理模式:(代理物件)==》用於方法增強

原理:通過虛擬機器在記憶體中建立類似於MyCar.class檔案

   要建立class檔案告訴虛擬機器:

1. 被建立的位元組碼檔案應該有多少方法

2. 建立一個代理物件來增強這些方法

 

 

 

1. 位元組碼載入器:JDK有一些程式,專業將各種位元組碼檔案載入到記憶體,這類程式簡稱位元組碼載入器

2. 如何將位元組碼檔案class檔案載入到記憶體?

底層實現過程是利用IO流技術,獲取檔案中的資料載入到記憶體,然後進行判斷和檢查。

載入器主要有三種:引導類載入器(BookStrapClassLoader),擴充套件類載入器(extensionClassLoader,ext),

應用類載入器(APPClassLoader,自定義的類)