若要加速整個系統的初始化效能,不至於loading過久
如果可以讓物件在真正被使用時,才被實體化
那就可以加速整個系統的初始化載入
這就是Proxy Pattern所要提供的功能
原本的程式執行流程是,
一開始先初始化物件 real=new Real()
要執行功能時就呼叫物件的method real.method()
若改成利用Proxy Pattern
則是變成,在要執行物件的功能時
才去初始化物件實體,並呼叫其功能
而在這裡,讓功能物件與使用的Proxy繼承自相同的Interface
因為具備有相同的method
這樣你就可以在外部程式很輕鬆的切換並決定是否要使用proxy
或在Prxoy內作一些額外的處理後,再傳遞給真正的執行物件
參與者
1.Printable Interface
定義一個執行物件與Proxy的共通介面
public interface Printable {
public void print(String msg);
}
2.Printer 真正的功能執行物件
實作介面所定義的必要功能
public class Printer implements Printable {
@Override
public void print(String msg) {
System.out.print("Run Print="+msg);
}
}
3.PrinterProxy
在Proxy內儲存了一個真正執行物件的實體(real)
而在實作功能上,才去初始化產生出物件
並執行功能
public class PrinterProxy implements Printable {
private Printer real;
@Override
public void print(String msg) {
if(real==null){
real=new Printer();
}
real.print("From Proxy:"+msg);
}
}
4.Main外部應用程式
可以很簡單的切換使用proxy或物件本體
去執行功能
public static void main(String[] args) {
PrinterProxy myP=new PrinterProxy();
//Printer myP=new Printer();
myP.print("HELLO");
}