您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java設(shè)計模式的代理模式怎么實現(xiàn)的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java設(shè)計模式的代理模式怎么實現(xiàn)文章都會有所收獲,下面我們一起來看看吧。
代理模式的定義: 由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標對象,代理對象作為訪問對象和目標對象之間的中介。
1、代理模式在客戶端與目標對象之間起到一個中介作用和保護目標對象的作用;
2、代理對象可以擴展目標對象的功能;
3、代理模式能將客戶端與目標對象分離,在一定程度上降低了系統(tǒng)的耦合度,增加了程序的可擴展性
1、代理模式會造成系統(tǒng)設(shè)計中類的數(shù)量增加
2、在客戶端和目標對象之間增加一個代理對象,會造成請求處理速度變慢;
3、增加了系統(tǒng)的復(fù)雜度;
代理模式的結(jié)構(gòu)比較簡單,主要是通過定義一個繼承抽象主題的代理來包含真實主題,從而實現(xiàn)對真實主題的訪問,下面來分析其基本結(jié)構(gòu)和實現(xiàn)方法。
案例: 大奔代干娘賣酒
抽象主題(Subject)類:賣酒
真實主題(Real Subject)類:干娘的酒館
代理(Proxy)類:大奔的酒攤
大奔來干娘的酒館前面擺了個攤代理賣酒的生意。
一個賣酒接口,聲明了一個賣酒的抽象方法
public interface Jiu { void show(); }
干娘的酒館類實現(xiàn)了賣酒的接口,并且實現(xiàn)了show()賣酒方法,聲明了一個酒的名字,和一個aa()方法提示大奔來擺攤了
public class GanNiang implements Jiu { private String name; GanNiang() { } GanNiang(String name) { this.name = name; aa(); } @Override public void show() { System.out.printf("賣出一壇%s", name); } public void aa() { System.out.println("大奔來擺攤了"); } }
大奔的酒攤類實現(xiàn)了賣酒接口,聲明了酒的名字和干娘酒館的屬性,并且實現(xiàn)了賣酒方法。
public class DaBen implements Jiu { private String name; private GanNiang ganNiang; DaBen() { } DaBen(String name) { this.name = name; } @Override public void show() { if (ganNiang == null) { ganNiang = new GanNiang(name); } ganNiang.show(); } }
new一個大奔的酒攤,調(diào)用兩次show()方法,就相當于賣了兩次酒。
public class Demo { public static void main(String[] args) { DaBen daBen = new DaBen("女兒紅"); daBen.show(); System.out.println(); System.out.println(); daBen.show(); } }
這里可以看出第一次賣酒和第二次賣酒輸出的結(jié)果不一樣,因為每一次賣酒都要去干娘的酒館拿酒。大奔第一次來拿酒的時候通知干娘,我來擺攤了,后面干娘已經(jīng)知道大奔來了所以再拿酒就不需要通知了。
關(guān)于“Java設(shè)計模式的代理模式怎么實現(xiàn)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java設(shè)計模式的代理模式怎么實現(xiàn)”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。