文章詳情頁(yè)
java結(jié)構(gòu)性模式之變壓器模式介紹(四)
瀏覽:3日期:2024-06-28 10:57:15
內(nèi)容: 關(guān)于模式實(shí)現(xiàn)的討論本模式在實(shí)現(xiàn)時(shí)有以下這些值得注意的地方: 第一、目標(biāo)接口可以省略。此時(shí),目標(biāo)接口和源接口實(shí)際上是相同的。 由于源是一個(gè)接口,而變壓器類(lèi)是一個(gè)類(lèi)(或抽象類(lèi)),因此這種做法看似平庸而并不平庸, 它可以使客戶(hù)端不必實(shí)現(xiàn)不需要的方法。這一點(diǎn)已經(jīng)在WindowAdapter的例子里做了詳盡的分析。 第二、變壓器類(lèi)可以是抽象類(lèi)。這已經(jīng)在WindowAdapter的例子里看到了。實(shí)際上,WindowAdapter的例子過(guò)于簡(jiǎn)單。 實(shí)際的情形里,你可能想給出一些實(shí)方法。 第三、帶參數(shù)的變壓器模式。使用這種辦法,變壓器類(lèi)就不必,有時(shí)可能不能是源類(lèi)的子類(lèi)。 變壓器類(lèi)根據(jù)參數(shù)返還一個(gè)合適的實(shí)例給客戶(hù)端。 問(wèn)答題第1題、請(qǐng)做一個(gè)小貓(kittie)的實(shí)類(lèi),并實(shí)現(xiàn)miao(),catchRat(),run(),sleep()等方法。 再做一個(gè)小狗(doggie)的接口,要求有wao(),fetchBall(),run(),sleep()等方法。 現(xiàn)在你的女朋友想要一只小狗,可是你只找到的一只小貓。請(qǐng)用變壓器模式把小貓“適配成小狗, 讓你的女朋友滿(mǎn)意。(提示:量力而為。) 第2題、請(qǐng)指出第一題的解答所使用的是那一種形式的變壓器模式。 第3題、筆者在許多場(chǎng)合給各種不同水準(zhǔn)的專(zhuān)業(yè)人士作過(guò)各種編程模式的介紹,發(fā)現(xiàn)參加OOP開(kāi)發(fā)工作的不同時(shí)間長(zhǎng)短的人, 對(duì)不同的模式理解接受的速度有所不同。唯獨(dú)在講過(guò)這個(gè)男朋友與小狗小貓的例子后,大家對(duì)變壓器模式的理解都很準(zhǔn)確。 讓筆者百思不得其解。你知道這是怎樣回事嗎? 第4題、請(qǐng)講一講使用實(shí)例形式的變壓器模式和使用類(lèi)形式的變壓器模式在第一題的解決上有何影響。 問(wèn)答題答案第1題、根據(jù)提示,我們可以量力而為。因此,我們將把miao()“適配成wao(),catchRat()“適配成fetchBall(), run(),sleep()不變。源代碼如下: IMG http://www.yesky.com/20011225/jt1225-1-kittie2doggie.gif[/IMG]package com.javapatterns.adapter.kittie2doggie;public interface Doggie{ void wao(); void fetchBall(); void run(); void sleep(); void setName(String name); String getName();}代碼清單11. SwingUI類(lèi)的源代碼。紅色的代碼就是使用WindowAdapter的無(wú)名內(nèi)部類(lèi)。 package com.javapatterns.adapter.kittie2doggie;public class Kittie { public void miao(){} public void catchRat() { } public void run() { } public void sleep() { } public String getName(){ return name; } public void setName(String name){ this.name = name; }}代碼清單12. SwingUI類(lèi)的源代碼。紅色的代碼就是使用WindowAdapter的無(wú)名內(nèi)部類(lèi)。 package com.javapatterns.adapter.kittie2doggie;public class Boyfriend extends Kittie implements Doggie{ public void wao() { this.miao(); } public void fetchBall() { this.catchRat(); } public void run() { super.run(); } public void sleep() { super.sleep(); } public String getName() { return super.getName(); } public void setName(String name) { super.setName(name); }}代碼清單13. SwingUI類(lèi)的源代碼。紅色的代碼就是使用WindowAdapter的無(wú)名內(nèi)部類(lèi)。 怎么,她不滿(mǎn)意呀?那也有辦法:把wao(),fatchBall()當(dāng)作新的方法,在變壓器類(lèi)中實(shí)現(xiàn)。由于你扮演變壓器角色, 當(dāng)她調(diào)用wao(),fatchBall()方法是,你就叫一聲,或把球撿回來(lái)就可以了。 你不滿(mǎn)意呀?那就再去找一只真正的小狗吧。變壓器模式的威力就到此為止了。 第2題、這里使用的是類(lèi)形式的變壓器模式。 第3題、我的一個(gè)學(xué)生告訴我,理解這個(gè)問(wèn)題的關(guān)鍵,即男朋友必須裝小狗。 第4題、使用類(lèi)形式的結(jié)果是,她一旦想要另一個(gè)寵物,她就得換一個(gè)男朋友。 使用實(shí)例形式的變壓器模式的結(jié)果是,她如果想要另一個(gè)寵物,原來(lái)的男朋友就得身兼幾種身份。 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. javascript將扁平的數(shù)據(jù)轉(zhuǎn)為樹(shù)形結(jié)構(gòu)的高效率算法2. PHP結(jié)構(gòu)型模式之享元模式詳解3. XML入門(mén)精解之結(jié)構(gòu)與語(yǔ)法4. BS結(jié)構(gòu)中使用PHP訪問(wèn)ORACLE LOB5. Python可以實(shí)現(xiàn)棧的結(jié)構(gòu)嗎6. 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack7. PHP結(jié)構(gòu)型模式之裝飾器模式8. python之生成多層json結(jié)構(gòu)的實(shí)現(xiàn)9. PHP內(nèi)核探索 —— 變量的創(chuàng)建:通過(guò)zval結(jié)構(gòu)來(lái)實(shí)現(xiàn)10. 數(shù)據(jù)結(jié)構(gòu)之利用PHP實(shí)現(xiàn)二分搜索樹(shù)
排行榜

網(wǎng)公網(wǎng)安備