0 結(jié)構(gòu)型模式
- 涉及如何組合類和對象以形成更大的結(jié)構(gòu)。
- 和類有關(guān)的結(jié)構(gòu)模式涉及如何合理地使用繼承機(jī)制。
- 和對象有關(guān)的結(jié)構(gòu)型模式涉及如何合理地使用對象組合機(jī)制。
1 代理模式
1.1 概念: 為其他對象提供一種代理以控制對這個對象的訪問。
-
1.2 場合:
- 遠(yuǎn)程代理
- 為對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在于不同地址空間的事實。
- 虛擬代理
- 如果一個對象的創(chuàng)建需要花費(fèi)較多的時間,就應(yīng)當(dāng)給該對象提供與一個代理模式
- 安全代理
- 用來控制真實對象訪問的權(quán)限。
- 遠(yuǎn)程代理
1.3 代理模式UML
- image.png
1.4 角色
ISubject 該接口是對被訪問者或者被訪問資源的抽象
SubjectImpl 被訪問者或者被訪問資源的具體實現(xiàn)類
SubjectProxy 被訪問者或者被訪問資源的代理實現(xiàn)類
Client 訪問者的抽象角色
package com.mg.springjiemi.proxy;
public interface ISubject {
public String request();
}
package com.mg.springjiemi.proxy;
public class SubjectImpl implements ISubject {
@Override
public String request() {
return "跟老板交談";
}
}
package com.mg.springjiemi.proxy;
public class SubjectProxy implements ISubject {
ISubject iSubject;
public SubjectProxy(ISubject iSubject) {
this.iSubject = iSubject;
}
@Override
public String request() {
System.out.println("先跟秘書交談,安全代理,虛擬代理,遠(yuǎn)程代理");
return iSubject.request();
}
}
package com.mg.springjiemi.proxy;
public class Client {
public static void main(String[] args) {
ISubject iSubject = new SubjectImpl();
SubjectProxy proxy = new SubjectProxy(iSubject);
String value = proxy.request();
System.out.println(value);
}
}
