1. 程式人生 > >java 關於初學面向物件的問題九:java開發的某些機制

java 關於初學面向物件的問題九:java開發的某些機制

代理模式:為物件提供一個代理以控制對該物件的訪問
作用:增加或者減少服務
實現方式: 

1、繼承 靜態代理 不推薦使用 高耦合度
2、關聯方式 靜態代理 依賴 介面 有一個介面,真實類實現該方法,代理類也實現該方法,並且真實類是代理類的一個屬性
抽象類 -》真實類 -》代理類 耦合度低
3、動態代理 反射機制 動態建立類 JDK動態代理類:
實現介面 InvocationHandler 方法 Object invoke()
引數:被代理物件  執行的方法  方法引數
Proxy類 newProxyInstance()
引數: 被代理的類載入器  被代理實現的所有介面 一個代理類處理邏輯的地方

代理的處理方法:

  1. 代理類與真實類繼承自同一介面
  2. 代理物件持有真實物件的引用
  3. 代理的方法與被代理的方法要求同樣的宣告
  4. 方法體插入代理類自有程式碼《可選》
  5. 方法體呼叫真實類方法
  6. 方法體插入代理類自有程式碼《可選》
  7. 代理類允許有自己的方法

裝飾模式:

類似於BufferedOutputStream和OutPutStream之間的關係

裝飾模式的處理方法;

  1. 構建原始類
  2. 構建裝飾類,持有原始類的物件為屬性
  3. 在構造方法中將原始類物件傳入
  4. 構建同樣的方法宣告,在方法體中呼叫原始類方法,再新增其它方法
  5. 裝飾類允許有自己的方法
關於類的功能擴充套件的幾種方式的區別: 1、代理模式:主要是控制訪問 2、裝飾模式:主要是增加功能 3、繼承:增加功能,增加屬性
工廠模式:根據傳入引數的不同而返回不同的實際物件。 工廠模式的處理方法:
  1. 有一個工廠類,工廠類持有需要生產的產品的引用,並且提供一個靜態的返回值為產品介面的帶引數的方法
  2. 有一個介面(或者抽象類,一般不為類),該介面是工廠需要生產的產品
  3. 至少有一個類實現了該介面,實現該介面的所有方法,也許每個實現類的方法是不一致的,一般情況下他不具有介面定義以外的方法
  4. 在工廠類的靜態方法中,通過判斷傳入的引數來決定返回值得不同,返回值是直接建立一個對應的產品物件
優勢:在新增一個類的時候,只需要在方法中新增一個判斷條件即可。 可以動態改變返回的物件值