標籤:設計模式 代理 模式
本人之前學的java web,後來轉的android方向,發現寫android的人都是天才,其中很多也應用到了java設計模式,說起java設計模式,大家都能說出幾個,比如android中application(單例模式)、眾多的監聽器(觀察者模式),眾多的適配器adapter(適配器模式)、處理映像的原廠模式……等等,可是大家有沒有自己去實現乃至去用這些良好的設計模式來設計自己的代碼呢?很多答案是否定的。但是仔細一想,只有遵循“只有寫出來才是自己的”的口號,所以今天就來一步一步來寫了……學習我快樂!
今天我實現的是代理模式:
首先我寫了一個介面類:
public interface Sourceable { public void method(); }
下面寫一個實現這個介面的類:
public class Source implements Sourceable {
@Override public void method() { System.out.println("the original method!"); }
}
然後我寫了一個代理類:
public class Proxy implements Sourceable {
private Source source; public Proxy(){ super(); this.source = new Source(); } @Override public void method() { before(); source.method(); atfer(); } private void atfer() { System.out.println("after proxy!"); } private void before() { System.out.println("before proxy!"); }
}
接下來我們就可以測試了:
public class ProxyTest {
public static void main(String[] args) { Sourceable source = new Proxy(); source.method(); }
}
測試結果:
before proxy!
the original method!
after proxy!
大家仔細看代碼,原類中的method()方法中執行的動作在Proxy類中method()方法中被執行了。想必大家到這已經很明白了。個人感覺有點介面回調的意思。
可能你就問了,這代理模式有什麼用呢?android中有沒有用到代理模式呢?答案是肯定的,大家記得進程中通訊吧,Activity和service間的通訊,很多教科書上說Activity和service間跨進程通訊,他媽的其實就是瞎說,如果不做任何處理,Service和Activity本在同一進程中,如果service要單獨開一進程,需要在配置service的時候加上android:process:romote。這時候就是跨進程通訊了,這是一些題外話,如果做到跨進程通訊,大家肯定想到的是aidl,aidl其實就是代理模式,大家可以根據上述所寫思考一下吧。不免囉嗦一下,下面一段是網上的部落格原話。
代理模式的應用情境:
如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:
1、修改原有的方法來適應。這樣違反了“對擴充開放,對修改關閉”的原則。
2、就是採用一個代理類調用原有的方法,且對產生的結果進行控制。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
JAVA設計模式——代理模式