1. 程式人生 > >設計模式筆記之六代理模式

設計模式筆記之六代理模式

代理模式

為什麼需要代理模式

當我們需要訪問外部資源的時候,由於我們自己網路限制,我們不能夠訪問到外部資源,但是如果有一個主機,可以我們訪問外部的資源,然後將外部資源存放到儲存裝置上,然後我們可以訪問這個儲存裝置來獲取我們想要的資源。在這裡這個主機扮演者代理的角色,幫助我們獲取我們需要的資源,因此,我們需要代理模式來幫助我們實現我們自身不能實現的需求。

什麼是代理模式

給某一個物件提供一個代理,並由代理物件控制對原物件的引用。

核心思想

通過代理類返回需要的資源,代理類是真實需求和目標資源的連通樞紐。

具體案例

模擬使用代理訪問外部資源

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");
	}
}


優點

簡單,方便,直接,

擴充套件方便,當我們使用代理,不可以一步得到我們需要的結果,我們可以使用多個代理來實現我們需要的結果。

對於原始的請求到達一定的保密機制。

缺點

過於依賴代理角色。