java 關於初學面向物件的問題九:java開發的某些機制
阿新 • • 發佈:2019-01-25
代理模式:為物件提供一個代理以控制對該物件的訪問
作用:增加或者減少服務
實現方式:
1、繼承 靜態代理 不推薦使用 高耦合度
2、關聯方式 靜態代理 依賴 介面 有一個介面,真實類實現該方法,代理類也實現該方法,並且真實類是代理類的一個屬性
抽象類 -》真實類 -》代理類 耦合度低
3、動態代理 反射機制 動態建立類 JDK動態代理類:
實現介面 InvocationHandler 方法 Object invoke()
引數:被代理物件 執行的方法 方法引數
Proxy類 newProxyInstance()
引數: 被代理的類載入器 被代理實現的所有介面 一個代理類處理邏輯的地方
代理的處理方法:
- 代理類與真實類繼承自同一介面
- 代理物件持有真實物件的引用
- 代理的方法與被代理的方法要求同樣的宣告
- 方法體插入代理類自有程式碼《可選》
- 方法體呼叫真實類方法
- 方法體插入代理類自有程式碼《可選》
- 代理類允許有自己的方法
裝飾模式:
類似於BufferedOutputStream和OutPutStream之間的關係
裝飾模式的處理方法;
- 構建原始類
- 構建裝飾類,持有原始類的物件為屬性
- 在構造方法中將原始類物件傳入
- 構建同樣的方法宣告,在方法體中呼叫原始類方法,再新增其它方法
- 裝飾類允許有自己的方法
- 有一個工廠類,工廠類持有需要生產的產品的引用,並且提供一個靜態的返回值為產品介面的帶引數的方法
- 有一個介面(或者抽象類,一般不為類),該介面是工廠需要生產的產品
- 至少有一個類實現了該介面,實現該介面的所有方法,也許每個實現類的方法是不一致的,一般情況下他不具有介面定義以外的方法
- 在工廠類的靜態方法中,通過判斷傳入的引數來決定返回值得不同,返回值是直接建立一個對應的產品物件