設計模式筆記之六代理模式
阿新 • • 發佈:2018-12-19
代理模式
為什麼需要代理模式
當我們需要訪問外部資源的時候,由於我們自己網路限制,我們不能夠訪問到外部資源,但是如果有一個主機,可以我們訪問外部的資源,然後將外部資源存放到儲存裝置上,然後我們可以訪問這個儲存裝置來獲取我們想要的資源。在這裡這個主機扮演者代理的角色,幫助我們獲取我們需要的資源,因此,我們需要代理模式來幫助我們實現我們自身不能實現的需求。
什麼是代理模式
給某一個物件提供一個代理,並由代理物件控制對原物件的引用。
核心思想
通過代理類返回需要的資源,代理類是真實需求和目標資源的連通樞紐。
具體案例
模擬使用代理訪問外部資源
UML:
程式碼
package com.dong.proxy; public interface AccessResource { public void request(String url); public void response(float id); } package com.dong.proxy; public class localhost implements AccessResource{ @Override public void request(String url) { System.out.println("傳送請求到" + url); } @Override public void response(float id ) { System.out.println("已經獲得資源 ,編號為" + id); } } package com.dong.proxy; import java.util.Random; public class Proxy implements AccessResource{ private localhost local; Random random = new Random(); float str = random.nextFloat(); public Proxy(localhost local) { super(); this.local = local; } @Override public void request(String url) { local.request("proxy host"); System.out.println("proxy host start access the "+ url); System.out.println("proxy Host Access the " + url+ " and store the resource"); System.out.println("localhost Start access proxy host resource"); System.out.println("Access end !!!" ); this.response(str); } @Override public void response(float id) { System.out.println("return the resouce , 編號" + id ); local.response(id); } } package com.dong.proxy; /** * 執行結果: * 傳送請求到proxy host proxy host start access the www.google.com proxy Host Access the www.google.com and store the resource localhost Start access proxy host resource Access end !!! return the resouce , 編號0.69638914 已經獲得資源 ,編號為0.69638914 * @author liuD * */ public class client { public static void main(String[] args) { localhost host =new localhost(); Proxy proxy = new Proxy(host); proxy.request("www.google.com"); } }
優點
簡單,方便,直接,
擴充套件方便,當我們使用代理,不可以一步得到我們需要的結果,我們可以使用多個代理來實現我們需要的結果。
對於原始的請求到達一定的保密機制。
缺點
過於依賴代理角色。