結(jié)構(gòu)型模式精品課件_第1頁
結(jié)構(gòu)型模式精品課件_第2頁
結(jié)構(gòu)型模式精品課件_第3頁
結(jié)構(gòu)型模式精品課件_第4頁
結(jié)構(gòu)型模式精品課件_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、結(jié)構(gòu)型模式第1頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二課程目標(biāo) 結(jié)構(gòu)型模式概述 Adapter模式 Bridge模式 Composite模式 Decorator模式 Faade模式 Flyweight模式 Proxy模式 第2頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二體驗(yàn)項(xiàng)目 使用Composite模式來編寫如圖3-1所示的二叉樹,然后使用深度優(yōu)先搜索法遍歷該二叉樹,并打印出根節(jié)點(diǎn)的高度,運(yùn)行效果如圖3-2所示。 圖3-1二叉樹圖 圖3-2 二叉樹遍歷結(jié)果圖第3頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式是為解決怎樣組裝

2、現(xiàn)有的類,設(shè)計(jì)他們的交互方式,從而達(dá)到實(shí)現(xiàn)一定的功能的目的。同時,結(jié)構(gòu)型模式包容了對很多問題的解決,例如擴(kuò)展性(外觀模式,組成模式,代理模式,裝飾模式),封裝性(適配器模式,橋接模式)。 結(jié)構(gòu)型模式中解決了以下幾個問題:在不破壞類封裝性的基礎(chǔ)上,實(shí)現(xiàn)新的功能。這一點(diǎn)包括裝飾模式,代理模式。 在不破壞類封裝性的基礎(chǔ)上,使得類可以同不曾估計(jì)到的系統(tǒng)進(jìn)行交互。這一點(diǎn)包括橋接和適配器模式。 創(chuàng)建一組類的統(tǒng)一訪問接口,這是組成模式。 對同一類創(chuàng)建不同的訪問界面,提供給不同需要的訪問者,這是外觀模式。 第4頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Adapter模式 適配器模式有類適配器和

3、對象匹配器兩種形式。其中類適配器使用多繼承(由于java不支持多繼承,所以可以引入接口的概念)來實(shí)現(xiàn)一個接口對另一個接口的匹配,對象適配器主要依賴于對象組合來實(shí)現(xiàn)接口的匹配。比如java窗體事件處理的事件適配器就是一個很好的例子。 模式介紹 主要適用于以下情況: 使用一個已經(jīng)存在的類,而它的接口不符合你的需求。 創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那些接口可能不一定兼容的類)協(xié)同工作。 使用一些已經(jīng)存在的子類,但是不可能對每一個都進(jìn)行子類化以匹配它們的接口。對象適配器可以適配它的父類接口,僅適用于對象適配器。 第5頁,共37頁,2022年,5月20日,19點(diǎn)12分,

4、星期二Adapter模式結(jié)構(gòu)圖適配器模式結(jié)構(gòu)圖如下: 類適配器結(jié)構(gòu)圖 對象適配器結(jié)構(gòu)圖 Target:定義Client使用的與特定應(yīng)用或領(lǐng)域相關(guān)的接口。 Adaptee:定義一個已經(jīng)存在的類,該類需要適配。 Adapter:對Adaptee類和Target接口進(jìn)行適配。Client通過Adapter實(shí)例對象來調(diào)用某些方法,然后適配器調(diào)用Adaptee的方法來實(shí)現(xiàn)請求第6頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二適配器模式示例比如我們編寫過兩個類,分別用于畫圓形樁和方形樁,假設(shè)現(xiàn)在有一個應(yīng)用,需要既畫方形樁,又要畫圓形樁,就可以使用該模式實(shí)現(xiàn)。 使用對象適配器 模式實(shí)現(xiàn)如下:pu

5、blic class DrawRoundpublic void displayRound(String msg)System.out.println(DrawRound displayRound():+msg);public class DrawSquarepublic void displaySquare(String str)System.out.println(DrawSquare displaySquare():+str); public class ShapeAdapter extends DrawSquareprivate DrawRound round;public ShapeA

6、dapter(DrawRound r)this.round=r;public void insertRound(String str)round.displayRound(str);第7頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二使用類適配器 模式實(shí)現(xiàn)如下:public interface DrawRoundInterfacepublic void displayRound(String msg);public class DrawRound implements DrawRoundInterface public void displayRound(String msg)Sys

7、tem.out.println(DrawRound displayRound():+msg);public class ShapeAdapter extends DrawSquare implements DrawRoundInterfaceprivate DrawRound round;public ShapeAdapter(DrawRound r)this.round=r;public void displayRound(String msg)round.displayRound(msg);/doSomethingpublic class Client public static void

8、 main(String args) ShapeAdapter d=new ShapeAdapter(new DrawRound();d.insertRound(圓形);d.displaySquare(方形);第8頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Adapter模式優(yōu)勢和不足 類適配器的優(yōu)缺點(diǎn)如下 :用一個具體的Adapter類對Adaptee和Target進(jìn)行匹配。結(jié)果是當(dāng)我們想要匹配一個類以及所有它的子類時,類Adapter將不能勝任工作。 使得Adapter可以重定義Adaptee的部分行為。對象適配器的優(yōu)缺點(diǎn)如下:允許一個Adapter與多個Adaptee,即A

9、daptee本身以及它的所有子類(如果有子類的話)同時工作。 使得重定義Adaptee的行為比較困難。 僅僅引入了一個對象,并不需要額外的引用(指針)以間接得到Adaptee。 第9頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Bridge模式在面向?qū)ο笤O(shè)計(jì)的基本概念中,對象這個概念實(shí)際上是由屬性和行為兩個部分組成的,屬性我們可以認(rèn)為是一種靜止的,一種抽象的。一般情況下,行為是包含在一個對象中,但是在有些情況下,我們需要將這些行為也進(jìn)行歸類,形成一個總的行為接口,這就是橋接模式的用處。模式介紹 主要適用于以下情況: 不希望在抽象和它的實(shí)現(xiàn)部分之間有一個固定的綁定關(guān)系。類的抽象以及它

10、的實(shí)現(xiàn)都應(yīng)該可以通過生成子類的方法加以擴(kuò)充。 在多個對象間共享實(shí)現(xiàn)(可能使用引用計(jì)數(shù)),但同時要求客戶并不知道這一點(diǎn)。 第10頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Bridge模式結(jié)構(gòu)圖橋接模式結(jié)構(gòu)圖如下: Abstraction:定義抽象類(接口),并維護(hù)一個Implementor類型對象。 RefinedAbstraction:抽象類的具體實(shí)現(xiàn)。 Implementor:實(shí)現(xiàn)層的抽象父類(接口),提供基本操作,以供抽象層次的類調(diào)用。ConcreteImplementor:Implementor的具體實(shí)現(xiàn)。 第11頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二

11、Bridge模式示例public abstract class InforListInforlistFormat Format;public void setFormat(InforlistFormat Format) this.Format = Format;public InforlistFormat getFormat() return this.Format;public abstract void distributeInforList();public abstract class InforlistFormatpublic abstract void formatImpl();p

12、ublic class StudentInforList extends InforListpublic void distributeInforList( )System.out.println(這是學(xué)生信息單);InforlistFormat format=this.getFormat();format.formatImpl();public class TeacherInforList extends InforListpublic void distributeInforList()System.out.println(這是老師信息單);InforlistFormat format=t

13、his.getFormat();format.formatImpl();public class HtmlFormat extends InforlistFormatpublic void formatImpl()System.out.println(使用HTML格式生成);public class PlainTextFormat extends InforlistFormatpublic void formatImpl()System.out.println(使用純文本格式生成);第12頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Bridge模式優(yōu)勢和不足 不足:Bridge模

14、式的應(yīng)用一般用于“兩個非常強(qiáng)的變化維度”,有時即使有兩個變化的維度,但是某個方向的變化維度并不劇烈,換言之兩個變化不會導(dǎo)致縱橫交錯的結(jié)果,并沒必要使用Bridge模式。 分離抽象部分及其實(shí)現(xiàn)部分。 提高可擴(kuò)充性。可以獨(dú)立的對抽象部分和實(shí)現(xiàn)部分進(jìn)行擴(kuò)充。 Bridge模式是比多繼承方案更好的一種解決方法。 Bridge模式主要有以下一些優(yōu)點(diǎn): 向客戶隱藏了實(shí)現(xiàn)部分,從而當(dāng)需要擴(kuò)展/更改實(shí)現(xiàn)部分時,不需要重新編譯客戶代碼。 第13頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二 Composite模式 Composite模式即合成模式,將對象組織到樹結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系。

15、合成模式可以使客戶端將簡單元素與復(fù)合元素同等看待。如文件夾與文件就是合成模式的典型應(yīng)用。 模式介紹 主要適用于以下情況: 需要表示對象的部分和整體的層次結(jié)構(gòu)。 希望用戶忽略組合對象與單個對象的區(qū)別,用戶將統(tǒng)一使用組合結(jié)構(gòu)中的所有對象。 第14頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二 Composite模式結(jié)構(gòu)圖合成模式結(jié)構(gòu)圖如下: Component:為組合中的對象聲明接口,定義所有類共有接口的缺省行為。 Leaf:表示葉子節(jié)點(diǎn),葉子節(jié)點(diǎn)沒有子節(jié)點(diǎn)。 Composite:所有可以包含子節(jié)點(diǎn)的類都擴(kuò)展這個類。這個類的主要功能是用來存儲子部件,實(shí)現(xiàn)了接口中的方法。Client:通

16、過接口操縱組合部件的對象。 第15頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Composite模式示例public abstract class Computer protected String name;public Computer(String name) = name;public abstract void getPart();import java.util.*;public class ComputerPart extends Computerprotected Vector part = new Vector();public Comput

17、erPart(String name)super(name);public void getPart()System.out.println(name);System.out.println(name+中的部件:);for(int i=0;ipart.size();i+)Computer c=(Computer)part.get(i);c.getPart();public void add(Computer c) part.add(c);public void remove(Computer c) part.remove(c); public class ChildPart extends C

18、omputer public ChildPart(String name)super(name);public void getPart()System.out.println(name);第16頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Composite模式優(yōu)勢和不足 Composite模式采用樹形結(jié)構(gòu)來實(shí)現(xiàn)普遍存在的對象容器,從而將“一對多”的關(guān)系轉(zhuǎn)化為“一對一”的關(guān)系, 將“客戶代碼與復(fù)雜的對象容器結(jié)構(gòu)”解耦 ,解耦之后,客戶端代碼將與純粹的抽象接口,而非對象容器的復(fù)內(nèi)部實(shí)現(xiàn)結(jié)構(gòu),發(fā)生依賴關(guān)系,從而更能“應(yīng)對變化”。 Composite模式中,是將“Add和Remove等

19、和對象容器相關(guān)的方法”定義在“表示抽象對象的Component類”中,還是將其定義在“表示對象容器的Composite類”中,是一個關(guān)乎“透明性”和“安全性”的兩難問題,需要仔細(xì)權(quán)衡。這里有可能違背面向?qū)ο蟮摹皢我宦氊?zé)原則”,但是對于這種特殊結(jié)構(gòu),這又是必須付出的代價。 Bridge模式優(yōu)點(diǎn)和不足: Composite模式在具體實(shí)現(xiàn)中,可以讓父對象中的子對象反向追溯 第17頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Decorator模式 Decorator模式即裝飾模式,是指動態(tài)的給一個對象添加一些額外的職責(zé),在Java 的IO操作中,經(jīng)常會用到諸如如下的語句: 模式介紹 主要

20、適用于以下情況: 在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加方法。或者處理那些可以撤消的方法。 當(dāng)不能采用生成子類的方式進(jìn)行擴(kuò)充時。BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(D:a.txt);while(br.readLine()!=null)System.out.println(br.readLine();在該代碼中使用多個的Decorator被層疊在一起,最后得到一個功能強(qiáng)大的流。既能夠被緩沖,又能夠得到行數(shù), 第18頁,共37頁,202

21、2年,5月20日,19點(diǎn)12分,星期二Decorator模式結(jié)構(gòu)圖裝飾模式結(jié)構(gòu)圖如下: Component:定義一個對象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對象。 ConcreteComponent:定義一個將要接收附加責(zé)任的類。 Decorator:持有一個組件對象的實(shí)例,并定義一個與抽象組件接口一致的接口。 ConcreteDecorator:負(fù)責(zé)給組件對象“貼上”附加的責(zé)任。第19頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Decorator模式示例public interface Phone public void use();public class HomePhone im

22、plements Phonepublic void use() System.out.println(打電話、接電話); public class Decorator implements PhonePhone phone;public Decorator(Phone phone) this.phone=phone; public void use( ) phone.use( ); public class AutoDecorator extends Decorator public AutoDecorator(Phone phone)super(phone);public void use(

23、 )phone.use( );System.out.println(裝配自動回復(fù)功能);public class WatchDecorator extends Decorator public WatchDecorator(Phone phone)super(phone);public void use( )phone.use( );System.out.println(裝配可視功能); public class Client public static void main(String args) Phone p=new HomePhone( );p.use();/添加自動回復(fù)功能Phone

24、 p1=new Decorator(new AutoDecorator(p);p1.use( );/添加自動回復(fù)功能和可視功能Phone p2=new Decorator(new WatchDecorator(new AutoDecorator(p);p2.use();第20頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Decorator模式優(yōu)勢和不足 Decorator模式主要有以下幾點(diǎn)優(yōu)勢:比靜態(tài)繼承更靈活。 避免了在層次結(jié)構(gòu)中高層的類有太多的特性。Decorator模式提供了一種“即用即付”的方法來添加職責(zé)。 Decorator模式的不足之處主要在于有太多的小對象。采用Dec

25、orator模式進(jìn)行設(shè)計(jì)往往會產(chǎn)生許多看上去類似的小對象,這些對象僅僅在它們相互連接的方式上有所不同,所以在排錯時會很困難。 Decorator模式不足第21頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Facade模式 Facade模式(外觀模式)的意圖是:為子系統(tǒng)中的一組接口提供一致的界面,F(xiàn)acade模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。 模式介紹 主要適用于以下情況: 當(dāng)要為一個復(fù)雜子系統(tǒng)提供一個簡單接口時。 客戶程序與抽象類的實(shí)現(xiàn)部分之間存在著很大的依賴性。 當(dāng)需要構(gòu)建一個層次結(jié)構(gòu)的子系統(tǒng)時,使用Facade模式定義子系統(tǒng)中每層的入口點(diǎn)。 第22頁,

26、共37頁,2022年,5月20日,19點(diǎn)12分,星期二Facade模式結(jié)構(gòu)圖外觀模式結(jié)構(gòu)圖如下: Facade:知道哪些子系統(tǒng)類負(fù)責(zé)處理請求,將客戶的請求代理給適當(dāng)?shù)淖酉到y(tǒng)對象。 子系統(tǒng)類(Subsystem classes):實(shí)現(xiàn)子系統(tǒng)的功能,處理由Facade對象指派的任務(wù)。 第23頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Facade模式示例import java.sql.*;public class Client public static void main(String args) DBConnection b=new DBConnection();b.setDri

27、ver(com.microsoft.jdbc.sqlserver.SQLServerDriver);b.setServername(lacalhost);b.setDBname(pubs);tryConnection c=b.connect();ResultSet rs=c.createStatement().executeQuery(select * from sale);while(rs.next()System.out.println(rs.getString(1);catch(Exception e)System.out.println(e);class DBConnection St

28、ring driver,servername,dbname;public void setDriver(String driver) this.driver=driver; public void setServername(String servername)this.servername= servername;public void setDBname(String dbname) this.dbname= dbname; public Connection connect() try Class.forName(driver);Connection cn = DriverManager

29、.getConnection(jdbc:microsoft:sqlserver:/“+ servername+:1433;databasename=+dbname, sa, );System.out.println(信息提示:連接 +servername + 服務(wù)器 + dbname +數(shù)據(jù)庫已成功!);return cn; catch (Exception e) System.out.println(信息提示:連接 + servername + 服務(wù)器+ dbname +失敗!n + e);return null;第24頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Facade模

30、式優(yōu)勢和不足 Facade模式主要有以下幾點(diǎn)優(yōu)勢:對客戶屏蔽子系統(tǒng)組件,因而減少了客戶處理的對象的數(shù)目,使得子系統(tǒng)使用起來更加方便。 實(shí)現(xiàn)了子系統(tǒng)與客戶間的松耦合關(guān)系。松耦合關(guān)系使得子系統(tǒng)的組件變化不會影響到客戶端。 Facade模式不足Facade模式的缺點(diǎn)主要在于使用Facade模式時,要定義interface是很麻煩的一件事情,特別是在內(nèi)部類所能提供的方法還沒確定或外部所需功能還沒確定的時候尤為如此。 第25頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二 Flyweight模式 Flyweight模式即享元模式,該模式的意圖是避免大量擁有相同內(nèi)容的小類的開銷(如耗費(fèi)內(nèi)存),使

31、大家共享一個類(元類)。享元模式以共享的方式高效的支持大量的細(xì)粒度對象。享元模式能做到共享的關(guān)鍵是區(qū)分內(nèi)部狀態(tài)和外部狀態(tài)。Flyweight模式是一個提高程序效率和性能的模式,會大大加快程序的運(yùn)行速度。應(yīng)用場合很多,比如你要從一個數(shù)據(jù)庫中讀取一系列字符串,這些字符串中有許多是重復(fù)的,那么我們可以將這些字符串儲存在Flyweight池(pool)中。 模式介紹 當(dāng)以下情況都成立時使用Flyweight模式: 一個應(yīng)用程序使用了大量的對象。 由于使用了大量的對象,造成很大的開銷。 如果刪除對象的外部狀態(tài),就可以使用相對較少的共享對象來取代很多組對象。 應(yīng)用程序不依賴于對象標(biāo)識。 第26頁,共37頁

32、,2022年,5月20日,19點(diǎn)12分,星期二Flyweight模式結(jié)構(gòu)圖享元模式結(jié)構(gòu)圖如下: Flyweight:描述一個接口,通過這個接口Flyweight示例對象可接受并作用于外部狀態(tài)。 UnsharedConcreteFlyweight:并非所有的Flyweight子類都需要被共享, UnsharedConcreteFlyweight對象通常將ConcreteFlyweight對象作為子節(jié)點(diǎn)。 FlyweightFactory:創(chuàng)建并管理Flyweight對象,確保合理的共享Flyweight 。ConcreteFlyweight:實(shí)現(xiàn)Flyweight接口,并為內(nèi)部狀態(tài)添加存儲空間。

33、 第27頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Flyweight模式示例public interface Flyweightpublic abstract void operation();public class ConcreteFlyweight implements Flyweightprivate String string;public ConcreteFlyweight(String str) string = str;public void operation()System.out.println(Concrete-Flyweight : + string)

34、;import java.util.Hashtable;public class FlyweightFactoryprivate Hashtable flyweights = new Hashtable();public Flyweight getFlyWeight(Object obj)Flyweight flyweight = (Flyweight) flyweights.get(obj);if (flyweight = = null) /產(chǎn)生新的ConcreteFlyweightflyweight = new ConcreteFlyweight(obj.toString();flywei

35、ghts.put(obj, flyweight);return flyweight;public int getFlyweightSize()return flyweights.size();FlyweightFactory對象提供了一個已創(chuàng)建的實(shí)例,如果該實(shí)例沒有,F(xiàn)lyweightFactory對象就創(chuàng)建一個。 第28頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Flyweight模式優(yōu)勢和不足 Flyweight模式優(yōu)勢:Flyweight模式不足:Flyweight模式主要是對存儲的節(jié)約,共享的Flyweight越多,存儲節(jié)約也就越多,節(jié)約量隨著共享狀態(tài)的增多而增大??梢允?/p>

36、用兩種方法來節(jié)約存儲,即使用共享來減少內(nèi)部狀態(tài)的消耗和用計(jì)算時間換取對外部狀態(tài)的存儲。 使用該模式時,傳輸、查找和計(jì)算外部狀態(tài)都會產(chǎn)生運(yùn)行時的開銷,尤其當(dāng)Flyweight對象原先被存儲為內(nèi)部狀態(tài)時,開銷會更大。 第29頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Proxy模式Proxy 模式中要創(chuàng)建“stub”或“surrogate”對象,它們的目的是接受請求并把請求轉(zhuǎn)發(fā)到實(shí)際執(zhí)行工作的其他對象。比如遠(yuǎn)程方法調(diào)用(RMI)利用Proxy模式,使得在其他JVM中執(zhí)行的對象就像本地對象一樣;Proxy模式在實(shí)際中經(jīng)常應(yīng)用,比如Windows系統(tǒng)提供的快捷方法。 模式介紹 該模式主要

37、有以下幾種情況: 遠(yuǎn)程代理(Remote Proxy):在不同的地址空間中提供局部代表。 虛代理(Virtual Proxy):根據(jù)需要創(chuàng)建開銷很大的對象。 智能指引(Smart Reference):取代簡單指針。 保護(hù)代理(Protection Proxy):控制對原始對象的訪問。第30頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Proxy模式結(jié)構(gòu)圖代理模式結(jié)構(gòu)圖如下: Subject:定義RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。 RealSubject:定義Proxy所代表的實(shí)體。 Proxy:保存一個

38、引用使得代理可以訪問實(shí)體。控制對實(shí)體的存取,并可能負(fù)責(zé)創(chuàng)建和刪除它,其他功能依賴于代理的類型。 第31頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二Proxy模式示例abstract interface Subjectabstract public void request();class RealSubject implements Subjectpublic void request()System.out.println(Hello World!);class ProxySubject implements Subject/以真實(shí)角色作為代理角色的屬性private Real

39、Subject realSubject; public void request() preRequest();if(realSubject = = null) realSubject = new RealSubject( ); realSubject.request( );/此處執(zhí)行真實(shí)對象的request( )方法postRequest();private void preRequest()System.out.println(代理角色即將調(diào)用真實(shí)對象的request()方法); private void postRequest()System.out.println(調(diào)用真實(shí)對象的req

40、uest()方法結(jié)束); 客戶段可通過如下的代碼訪問真實(shí)對象的方法:Subject sub=new ProxySubject();sub.request(); 第32頁,共37頁,2022年,5月20日,19點(diǎn)12分,星期二java動態(tài)代理類 Static Class getProxyClass (ClassLoader loader, Class interfaces):獲得一個代理類,其中l(wèi)oader是類裝載器,interfaces是真實(shí)類所擁有的全部接口的數(shù)組。 類庫中提供三個類直接支持代理模式:Proxy,InvocationHandler和Method。 Proxy類:該類即為動態(tài)代理類。主要有如下主要方法: Protected Proxy(InvocationHandler h):構(gòu)造函數(shù),用于給內(nèi)部的h賦值。 Static Object newProxyInstance(ClassLoader loader, Class interfaces, InvocationHandler h):返回代理類的一個實(shí)例。 InvocationHandler接口:該接口中僅定義了一個方法Object invoke(Object obj,Method method, Object args)。在實(shí)際使用時,第一個參數(shù)obj一般是指代理類,meth

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論