代理模式(Proxy)就是為其他對象提供一種代理以控制這個對象的訪問,一個對象不想直接訪問這個對象
具體Subject類:定義了RealSubject和Proxy的公用接口,這樣就可以任何使用RealSubject的地方都可以用Proxy
RealSubject類:定義了Proxy所代表的真實實體。
Proxy類:保存一個引用使得代理可以訪問實體,并提供一個與Subject的接口相同的接口,這樣代理就可以用來代替實體。
具體的代理模式的原理圖:

簡單的展示了一下對于Proxy的原理,然后今天自己琢磨了一下時序圖也簡單的做了一下,因為一直沒有接觸過,可能有好多錯誤呢:

簡單的敘述了一下,一個請求的提交過程,每次在調用一個類的方法的時候,都先經過這個類的代理(Proxy),下面就是一個簡單的例子來筆記一下:
~~~
package com.designpattern.proxy;
public interface Phone {
public void show();
}
~~~
~~~
package com.designpattern.proxy;
public class IPhone4S implements Phone {
private String owner;
public IPhone4S(String owner) {
this.owner = owner;
}
@Override
public void show() {
System.out.println("I'm " + owner
+ "'s IPhone4S which can do nothing while just a phone!");
}
}
~~~
~~~
package com.designpattern.proxy;
public class Proxy implements Phone {
private String owner;
private IPhone4S phone;
public Proxy(String owner) {
this.owner = owner;
}
@Override
public void show() {
if (phone == null) {
phone = new IPhone4S(owner);
}
phone.show();
}
}
~~~
~~~
package com.designpattern.proxy;
public class Client {
public static void main(String[] args) {
Proxy proxy = new Proxy("halberd");
proxy.show();
}
}
~~~
~~~
I'm halberd's IPhone4S which can do nothing while just a phone!
~~~
這樣就簡單的實現了代理模式,其實對于大多數結構型模式來說都一樣,解決問題的思想是一樣的,都是從添加中間件的方式達到一個解耦合的作用。
使用代理模式,能夠在不改變原來代碼工商的基礎上對某一對象進行額外的控制,從而更好的體現對象中的單一職責。但是對于靜態代理來說,一個接口只能服務于一種類型,如果要代理方法很多的時候,則要為每一個方法定義接口。這樣就要學習一下動態代理和反射機制。今天被迫當了一天工人,好累啊,先睡了,明天找時間研究一下動態代理和反射機制,然后再補充到這里......
- 前言
- 前言(目錄、源碼、資料)
- (一)簡單工廠模式(SimpleFatory)
- (二)工廠方法模式(FactoryMethod)
- (三)抽象工廠模式(AbstractFactory)
- (四)創建者模式(Builder)
- (五)原型模式(Prototype)
- (六)單例模式(Singleton)
- (七)外觀模式(Facade)
- (八)適配器模式(Adapter)
- (九)代理模式(Proxy)
- (十)裝飾模式(Decorator)
- (十一)橋模式(birdge)
- (十二)組合模式(Composite)
- (十三)享元模式(Flyweight)
- (十四)模板方法模式(Template)
- (十五)觀察者模式(Observer)
- (十六)狀態模式(State)