建立式模式:抽象工廠/建造者/工廠方法/原型/單例
構造型模式:介面卡/橋接/組合/裝飾/外觀/享元/**
行為型模式:責任鏈/命令/直譯器/迭代子/中介者/備忘錄/觀察者/狀態/策略/模板方法/訪問者
**模式:使用乙個新的**類為目標類(被**類)進訪問的控制,與裝飾者模式不同,**類物件可以有多個目標類,控制的目的是為了在呼叫目標類方法之前或之後執行某些其他操作、或者增強或減弱目標類的某些方法中的功能,作為乙個委託者起到不改變目標類的核心**就能夠實現功能的增強或新功能的新增的作用。
靜態**:當被**類(目標類)與**類(委託類)在程式執行之前已經存在,即執行前就確定了關係生成了位元組碼檔案,這種由委託類和目標類形成的**關係就是靜態**。
**例項:(經紀人**明星)【前提是經紀人和明星實現了相同介面】
介面:
/** * 介面(目標類和委託類必須實現同乙個介面)
*/public inte***ce star
委託類:
/** * 經紀人類(作為委託類),要和目標類實現相同的介面
* 可以**多個實現了相同介面的目標物件(通過建構函式傳入例項物件的引用,面向介面程式設計、多型)
*/ public class agent implements star
private void actionbefore()
@override
public void action()
private void actionafter()
}目標類:
public class songer implements star
}public class actor implements star
}測試當前例項的測試類:
public class staticproxytest
}1.**物件服務於實現了相同介面的物件,如果要**的方法很多,勢必要為每一種方法都進行**,靜態**在程式規模稍大時就無法勝任了。
2.如果介面增加乙個方法,除了所有委託類需要實現這個方法外,所有**類也需要實現此方法。增加了**維護的複雜度。
動態**:(基於jdk的動態**\proxy方式)
動態**它可以直接給某乙個目標物件(委託物件)生成乙個**物件,而不需要**類存在。動態**與靜態**模式原理是一樣的,只是動態**類的原始碼是在程式執行期間由jvm根據反射等機制動態的生成,所以不存在**類的位元組碼檔案。**類和委託類的關係是在程式執行時確定。
**例項:(也用經紀人**明星這個例子)【前提是經紀人和明星實現了相同介面】
介面:/**
* 介面(目標類和委託類必須實現同乙個介面)
*/public inte***ce star
目標類:
public class songer implements star }
委託類由jvm通過反射動態生成
/***
* @param proxy 當前建立出來的動態**物件
* @param method 當前呼叫的方法物件
* @param args 呼叫的方法引數
* @return
* @throws throwable
*/@override
public object invoke(object proxy, method method, object args) throws throwable
private void actionbefore()
private void actionafter()
} 結合proxy類生成**物件
invocationhandlerimp invocationhandlerimp = new invocationhandlerimp(star);
//引數一是乙個類載入器
//引數二是目標類上的所有介面的位元組碼物件
//引數三是委託者的呼叫處理者物件
star starproxy= (star) proxy.newproxyinstance(this.getclass().getclassloader(), songer.class.getinte***ces(), invocationhandlerimp); }
測試類**:
public class dynamicproxytest
}
動態**:(基於cglib的動態**\enhancer方式)
如果真實類是乙個普通類,沒有實現介面,那麼就採用這種方式, 建立出來真實類的子類作為**類,是繼承關係
測試例項:(同上)
/*** 如果真實類是乙個普通類,沒有實現介面,那麼就採用這種方式, 建立出來真實類的子類作為**類。
*/public class dynamicproxycglibtest
});//建立**物件呼叫**方法
songer s = (songer)enhancer.create();
s.action();
}private void actionbefore()
private void actionafter()
}}
java設計模式
a categorization of patterns by intent intent patterns inte ces adapter,facade,composite,bridge responsibility singleton,observer,mediator,proxy,chain...
JAVA設計模式
設計模式 設計模式分類 設計模式分為三類,建立型模式,結構型模式,行為型模式 建立型模式 1 工廠方法模式 2 抽象工廠模式 3 單例模式 4 建造者模式 5 原型模式 結構型模式 1 介面卡模式 2 裝飾器模式 3 模式 4 外觀模式 5 橋接模式 6 組合模式 7 享元模式 行為型模式 1 策略...
JAVA設計模式
介面卡模式 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本不相容的類可以合作無間。外觀模式 提供了乙個統一的介面,用來訪問子系統中的一群介面。外觀定義了乙個高層介面,讓子系統更容易使用。模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演...