代理模式(Proxy)定義:爲其餘對象提供一種代理,以控制對這個對象的訪問java
類型:結構型模式git
順口溜:適裝橋組享代外github
package com.amosli.dp.structural.proxy; public class Client { public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.request(); } } package com.amosli.dp.structural.proxy; public class Proxy extends Subject { private Subject subject; public Proxy() { subject = new RealSubject(); } @Override void request() { subject.request(); } } package com.amosli.dp.structural.proxy; public class RealSubject extends Subject{ @Override void request() { System.out.println("this is realsubject..."); } } package com.amosli.dp.structural.proxy; public abstract class Subject { abstract void request(); }
爲一個位於不一樣的地址空間的對象提供一個本地的代理對象。這個不一樣的地址空間能夠是在同一臺主機中,也但是在另外一臺主機中,遠程代理又叫作大使(Ambassador) ide
根據須要建立開銷很大的對象。若是須要建立一個資源消耗較大的對象,先建立一個消耗相對較小的對象來表示,真實對象只在須要時纔會被真正建立。 this
控制對原始對象的訪問。保護代理用於對象應該有不一樣的訪問權限的時候。 spa
取代了簡單的指針,它在訪問對象時執行一些附加操做。代理
它是虛擬代理的一種,把複製(克隆)操做延遲到只有在客戶端真正須要時才執行。通常來講,對象的深克隆是一個開銷較大的操做,Copy-on-Write代理可讓這個操做延遲,只有對象被用到的時候才被克隆。指針
本系列文章源碼地址,https://github.com/amosli/dp 歡迎Fork & Star !!code