日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

java-设计模式(结构型)-【代理模式】

發(fā)布時(shí)間:2023/12/20 asp.net 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-设计模式(结构型)-【代理模式】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.代理模式(ProxyMode)

? 定義:外觀模式是對(duì)類與類之間關(guān)系的描述,而代理模式是對(duì)原來(lái)的方法添加其他的操作

? ? ? ? ? 代理有“網(wǎng)關(guān)”的含義,比如用戶訪問(wèn)論壇,則要經(jīng)過(guò)代理(網(wǎng)關(guān))授權(quán)給你才能訪問(wèn),即

? ? ? ? ? 游客和注冊(cè)用戶的權(quán)限不同。

? ? ? ? ? 比如說(shuō)你要去買房子,而買房子的過(guò)程包括:1.看房->2.談價(jià)->3.簽訂合約->4.正式入手(買房)->5.入住。

? ? ? ? ? 而代理類就是對(duì)步驟4操作添加其他操作,而這些操作都由代理類幫你完成。簡(jiǎn)化了你的買房過(guò)程。

? 總結(jié):對(duì)于某些“遠(yuǎn)程”(難以完成的)操作,為了能快速完成,此時(shí)可以借助代理類幫我們完成部分操作。

? ? ? ? ? ?比如遠(yuǎn)程訪問(wèn)一張大圖時(shí),由于網(wǎng)絡(luò)原因不知何時(shí)回返回過(guò)來(lái),可以通過(guò)代理類先提前返回一個(gè)縮略圖

? 使用場(chǎng)景:

? ? (1)遠(yuǎn)程代理。典型的就是客戶端與webservice使用的情況,客戶端由于是針對(duì)OOP編程,而不是針對(duì)webservice中的方法進(jìn)行編程,

? ? ? ? ? ?所以得在客戶端模擬一下webservice的環(huán)境,用proxy來(lái)對(duì)webservice進(jìn)行包裝,這樣就可以使用proxy代理類來(lái)遠(yuǎn)程操作webservice了。

??? (2)虛擬代理。比如你要開(kāi)發(fā)一個(gè)大文檔查看軟件,大文檔中有大的圖片,有可能一個(gè)圖片有100MB,在打開(kāi)文件時(shí)不可能將所有的圖片都顯示出來(lái),

? ? ? ? ? ?這樣就可以使用代理模式,當(dāng)需要查看圖片時(shí),用proxy來(lái)進(jìn)行大圖片的打開(kāi)。

??? (3)安全代理。其實(shí)也就是本例中所舉的買車的例子,金錢不夠不可以買車!

??? (4)智能指引。比如在訪問(wèn)一個(gè)對(duì)象時(shí)檢測(cè)其是否被鎖定等情況。

? ? ? ? ? ? ? 對(duì)已有的方法進(jìn)行改進(jìn),此時(shí)有兩種辦法:

? ? ? ? ? ? ? ? 1、修改原有的方法來(lái)適應(yīng)。這樣違反了“對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉”的原則。

? ? ? ? ? ? ? ? 2、就是采用一個(gè)代理類調(diào)用原有的方法,且對(duì)產(chǎn)生的結(jié)果進(jìn)行控制。這種方法就是代理模式。

? ? ? ? ? ? ? ? ? ? ?使用代理模式,可以將功能劃分的更加清晰,有助于后期維護(hù)!

2.圖解

? 2.1 共同的接口方法

//買車接口 public interface BuyCar {//買車的行為void buyCar(); }

 2.2 實(shí)現(xiàn)接口的人類

//人類:具有現(xiàn)金,名字屬性,具有買車行為的接口。 public class People implements BuyCar {private int cash;private String username;//買車行為@Overridepublic void buyCar() {// TODO Auto-generated method stubSystem.out.println(this.username+"買了一輛小車");}public int getCash() {return cash;}public void setCash(int cash) {this.cash = cash;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;} }

  2.3 實(shí)現(xiàn)接口的代理類

//安全代理類 //人買車代理類:具有“人”成員,具有買房接口的方法 public class ProxyPeople implements BuyCar {private People p=null;private String proxyname=null;public ProxyPeople(String proxyname){this.proxyname=proxyname;}//對(duì)于人買車的行為進(jìn)行安全代理@Overridepublic void buyCar() {if(p==null){System.out.println("沒(méi)人來(lái)買車,"+this.proxyname+"繼續(xù)等待客戶光臨");return ;}System.out.println(proxyname+"在陪"+p.getUsername()+"客戶買車。。。");//符合條件則可以買車。if(p.getCash()>10000){//代理之前的操作。。。System.out.println(this.proxyname+":"+p.getUsername()+"有"+p.getCash()+"元,你可以買10000以上的小車");p.buyCar();//代理之后的操作。。。System.out.println(this.proxyname+"成功代理"+p.getUsername()+"買了一輛車");}elseSystem.out.println(this.proxyname+":"+p.getUsername()+"有"+p.getCash()+"元,低于10000,無(wú)法買車");}public People getP() {return p;}public void setP(People p) {if(p!=null)System.out.println(p.getUsername()+"先生/女士,來(lái)買車了。。。");this.p = p;} }

  2.4 測(cè)試

public class Test {public static void main(String[] args) {// TODO Auto-generated method stubPeople p=new People();p.setCash(12000);p.setUsername("黃生");ProxyPeople proxy=new ProxyPeople("A車代理");proxy.setP(p);proxy.buyCar();p.setCash(5000);proxy.buyCar();proxy.setP(null);proxy.buyCar();} }

  2.5 運(yùn)行結(jié)果

黃生先生/女士,來(lái)買車了。。。 A車代理在陪黃生客戶買車。。。 A車代理:黃生有12000元,你可以買10000以上的小車 黃生買了一輛小車 A車代理成功代理黃生買了一輛車 A車代理在陪黃生客戶買車。。。 A車代理:黃生有5000元,低于10000,無(wú)法買車 沒(méi)人來(lái)買車,A車代理繼續(xù)等待客戶光臨

  

  

轉(zhuǎn)載于:https://www.cnblogs.com/beyondbycyx/p/4425164.html

總結(jié)

以上是生活随笔為你收集整理的java-设计模式(结构型)-【代理模式】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。