天天看小說

第85章

大B:“再舉個通俗的例子,你想找某局長幫你做一件事情,但局長官位顯赫,你又不能輕易見著,你就想到了找他的秘書,通過她傳話給局長,這樣你就等於請他的秘書幫你辦成了那件事。秘書爲什麼就可以找到局長呢,因爲秘書和局長之間有一定的關係。這裡產生了四個對象:你、秘書、局長、秘書-局長(關係)。JAVA中同樣有代理關係,我們叫做代理模式。”

小A:“代理模式有什麼作用呢?”

大B:“他能爲其他對象(局長)提供一種代理(秘書)以控制對這個對象(局長)的訪問。代理對象可以在客戶端(你)和目標對象(局長)之間起到中介的作用。”

小A:“代理模式都有些什麼角色?”

大B:“1、抽象角色(秘書-局長):聲明真實對象和代理對象的共同接口(秘書-局長)。2、代理角色(秘書):代理對象角色(秘書)內部含有對真實對象(局長)的引用,從而可以操作真實對象(局長),同時代理對象(秘書)提供與真實對象(局長)相同的接口(秘書-局長)以便在任何時刻都能代替真實對象(局長)。同時,代理對象(秘書)可以在執行真實對象(局長)操作時,附加其他的操作,相當於對真實對象(局長)進行封裝。3、真實角色(局長):代理角色(秘書)所代表的真實對象(局長),是我們最終要引用的對象(局長)。”

下面用四個代碼來是這個原理:

Client.java(你)、ProxySubject.java(秘書)、RealSubject.java(局長)、Subject.java(關係)

(1)Subject.java(關係)

package.pjwqh.proxyTest;

//抽象角色

abstractpublicclassSubject

{

abstractpublicvoidrequest();

}

(2)RealSubject.java(局長)

package.pjwqh.proxyTest;

//真實角色:實現了Subject的request()方法

publicclassRealSubjectextendsSubject

{

publicRealSubject()

{

}

publicvoidrequest()

{

System.out.println(“我是局長,哈哈”);

}

}

(3)ProxySubject.java(秘書)

package.pjwqh.proxyTest;

//代理角色

publicclassProxySubjectextendsSubject

{

privateRealSubjectrealSubject;//以真實角色作爲代理角色的屬性

publicProxySubject()

{

}

publicvoidrequest()//該方法封裝了真實對象的request方法

{

preRequest();

if(realSubject……null)

{

realSubject=newRealSubject();

}

realSubject.request();//此處執行真實對象的request方法

postRequest();

}

privatevoidpreRequest()

{

//somethingyouwanttodobeforerequesting

}

privatevoidpostRequest()

{

//somethingyouwanttodoafterrequesting

}

}

4)Client.java(你)

package.pjwqh.proxyTest;

//客戶端調用

publicclassClient

{

publicstaticvoidmain(String[]args)

{

//你直接找(秘書)

Subjectsub=newProxySubject();

sub.request();

}

}

運行輸出了“我是局長,哈哈”

大B:“這說明我們通過代理對象(秘書)成功調用了被代理對象(局長)的方法。由代碼可以看出,客戶實際需要調用的是RealSubject類的request()方法,現在用ProxySubject來代理RealSubject類,同樣達到目的,同時還封裝了其他方法(preRequest(),postRequest()),可以處理一些其他問題。”

第73章第140章第106章第84章第165章第67章第80章第85章第159章第68章第153章第81章第193章第225章第198章第162章第54章第8章第99章第134章第137章第126章第49章第152章第71章第128章第93章第136章第220章第23章第210章第100章第28章第37章第31章第52章第173章第216章第171章第168章第211章第42章第117章第208章第52章第72章第173章第165章第126章第103章第174章第226章第227章第38章第6章第124章第125章第1章第180章第39章第223章第91章第127章第113章第37章第225章第29章第227章第34章第210章第175章第178章第177章第168章第81章第24章第170章第209章第186章第209章第135章第159章第210章第27章第97章第130章第216章第21章第123章第40章第62章第89章第55章第136章第39章第198章第213章第117章第139章
第73章第140章第106章第84章第165章第67章第80章第85章第159章第68章第153章第81章第193章第225章第198章第162章第54章第8章第99章第134章第137章第126章第49章第152章第71章第128章第93章第136章第220章第23章第210章第100章第28章第37章第31章第52章第173章第216章第171章第168章第211章第42章第117章第208章第52章第72章第173章第165章第126章第103章第174章第226章第227章第38章第6章第124章第125章第1章第180章第39章第223章第91章第127章第113章第37章第225章第29章第227章第34章第210章第175章第178章第177章第168章第81章第24章第170章第209章第186章第209章第135章第159章第210章第27章第97章第130章第216章第21章第123章第40章第62章第89章第55章第136章第39章第198章第213章第117章第139章
主站蜘蛛池模板: 乌拉特中旗| 镇江市| 莱州市| 峨边| 衡南县| 商河县| 黔西| 罗江县| 清苑县| 永兴县| 连平县| 奉化市| 琼海市| 无棣县| 禹州市| 衡山县| 泰宁县| 景宁| 巴彦县| 普宁市| 海原县| 盘锦市| 澄迈县| 衡水市| 淮北市| 张家港市| 汉川市| 宁津县| 东乌珠穆沁旗| 安康市| 山西省| 天全县| 屏东县| 盐边县| 专栏| 台东市| 江油市| 建瓯市| 宜丰县| 伊川县| 垫江县|