文章詳情頁(yè)
java結(jié)構(gòu)性模式之變壓器模式介紹(二)
瀏覽:3日期:2024-06-28 09:08:44
內(nèi)容: 實(shí)例形式的變壓器模式的定義實(shí)例形式的變壓器模式的類圖定義如下。 IMG http://www.yesky.com/20011225/jt1225-1-objectadapter.gif[/IMG]圖2. 實(shí)例變壓器模式的類圖定義 在圖1可以看出,模式所涉及的成員有: 目標(biāo)(Target)。這就是我們所期待得到的接口。目標(biāo)可以是實(shí)的或抽象的類。源(Adaptee)。現(xiàn)有需要適配的接口。 變壓器(Adapter)。變壓器類是本模式的核心。變壓器把源接口轉(zhuǎn)換成目標(biāo)接口。 顯然,這一角色必須是實(shí)類。 本模式的示范代碼如下: package com.javapatterns.adapter;public interface Target { /** * Class Adaptee contains operation sampleOperation1. */ void sampleOperation1(); /** * Class Adaptee doesn't contain operation sampleOperation2. */ void sampleOperation2();}代碼清單4. Target的源代碼。 package com.javapatterns.adapter;public class Adapter implements Target {public Adapter(Adaptee adaptee){ super(); this.adaptee = adaptee; } public void sampleOperation1(){ adaptee.sampleOperation1(); } public void sampleOperation2(){ // Write your code here } private Adaptee adaptee;}代碼清單5. Adapter的源代碼。 package com.javapatterns.adapter;public class Adaptee { public void sampleOperation1(){}}代碼清單6. Adaptee的源代碼。 實(shí)例形式的變壓器模式的效果第一、 一個(gè)變壓器可以把多種不同的源適配到同一個(gè)目標(biāo)。換言之,同一個(gè)變壓器可以把源類和它的子類都適配到目標(biāo)接口。 第二、 與類形式的變壓器模式相比,要想置換源類的方法就不容易。如果一定要置換掉源類的一個(gè)或多個(gè)方法,就只好先做一個(gè)源類的子類, 將源類的方法置換掉,然后再把源類的子類當(dāng)作真正的源進(jìn)行適配。 第三、 雖然要想置換源類的方法不容易,但是要想增加一些新的方法則方便得很。 而且新增加的方法同時(shí)適用于所有的源。 在什么情況下使用變壓器模式在以下各種情況下使用變壓器模式: 第一、 你需要使用現(xiàn)有的類,而此類的接口不符合你的需要。 第二、 你想要建立一個(gè)可以重復(fù)使用的類,用以與一些彼此之間沒有太大關(guān)聯(lián)的一些類, 包括一些可能在將來(lái)引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。 第三、 (對(duì)實(shí)例形式的變壓器模式而言)你需要改變多個(gè)已有的子類的接口, 如果使用類形式的變壓器模式,就要針對(duì)每一個(gè)子類做一個(gè)變壓器類,而這不太實(shí)際。 J2SE中的變壓器模式的使用在爪哇語(yǔ)言2.0的標(biāo)準(zhǔn)SDK中,有很多的變壓器類。如: 庫(kù)程序包javaawtevent中有 ComponentAdapter ContainerAdapter FocusAdapter HierarchyBoundsAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter 庫(kù)程序包Javaxswingevent中有InternalFrameAdapter MouseInputAdapter 這些都是變壓器模式使用的實(shí)際例子。值得指出的是,WindowAdapter的建立者們不可能預(yù)見到你所要使用的目標(biāo)接口, 因此WindowAdapter不可能實(shí)現(xiàn)你的目標(biāo)接口。但是,在考察了這些變壓器類的使用范圍之后,我們會(huì)發(fā)現(xiàn), WindowAdapter只需實(shí)現(xiàn)WindowListener的接口即可,也就是說,目標(biāo)接口被省略了。請(qǐng)見下面的解釋。 from-yesky Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽:
Java
相關(guān)文章:
1. JS樹形結(jié)構(gòu)根據(jù)id獲取父級(jí)節(jié)點(diǎn)元素的示例代碼2. xml文件的結(jié)構(gòu)解讀第1/2頁(yè)3. javascript將扁平的數(shù)據(jù)轉(zhuǎn)為樹形結(jié)構(gòu)的高效率算法4. 數(shù)據(jù)結(jié)構(gòu)之利用PHP實(shí)現(xiàn)二分搜索樹5. php:樹形結(jié)構(gòu)的算法6. PHP設(shè)計(jì)模式(八)裝飾器模式Decorator實(shí)例詳解【結(jié)構(gòu)型】7. JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例8. PHP結(jié)構(gòu)型模式之享元模式詳解9. python數(shù)據(jù)結(jié)構(gòu)的排序算法10. Django更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)步驟
排行榜
