歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java代理模式(Proxy)簡介

Java代理模式(Proxy)簡介

日期:2017/3/1 9:08:18   编辑:Linux編程

Java代理模式相對來講比較簡單和容易理解。

一, 代理模式(Proxy)的定義

教材裡定義很簡單:

所謂代理模式, 就是為其他對象提供一種代理控制對這個對象的訪問.

上面出現了3個名詞:

1.其他對象

2.一種代理

3.這個對象

實際上就是:

這個對象 找了 一種代理來 避免其他對象的訪問

二, 代理模式的例子

例如有個狐狸揍1個只狗, 給它1個悶棍, 再1個上勾拳.

但是狐狸不想自己去, 是怕被尋仇.

簡單來講, 就是狐狸想揍狗, 但是不想讓狗知道狐狸要揍他.

所以狐狸找了熊來做代理... 就是讓熊去揍狗..

熊對狐狸說: 我不會揍狗的技能啊,

狐狸對熊說: 你用我的技能就可以了.

揍狗接口 Hitable<T>:

public interface Hitable<T> {
public void hit(T o);
}

狗類Dog:

public class Dog {
private String name;
public Dog(String name){
this.setName(name);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

狐狸類Fox:

狐狸實現了揍狗接口:

public class Fox implements Hitable<Dog> {
@Override
public void hit(Dog g){
this.sap(g);
this.uppercut(g);
}

//悶棍
private void sap(Dog g){
System.out.println("give " + g.getName() + " a Sap!");
}

//上勾拳
private void uppercut(Dog g){
System.out.println("give " + g.getName() + " a Uppercute!");
}

}

就是給狗1個悶棍 + 上鉤拳啦

熊類ProxyBear:

為了揍狗, 熊也要實現揍狗接口..

但是熊實際上用的是狐狸的技能來揍狗.

package proxyPattern;

public class ProxyBear implements Hitable<Dog>{
private Hitable<Dog> f = null;
public ProxyBear(){
if (null == f){
f = new Fox();
}
}

@Override
public void hit(Dog g){
if (null != f){
System.out.println("Bear hit InterDogChicke!");
f.hit(g);
System.out.println("Bear bite InterDogChicke!");
}
}
}

客戶端代碼:

Dog g = new Dog("InterDogChicken");
ProxyBear b = new ProxyBear();

b.hit(g);

輸出:

看上去就好像一只熊把狗揍了, 隱藏了狐狸了這個存在.

也就是狗不知道實際上狐狸在揍它..

實際上, 這個模式也加入了熊自己的技能... 相當與對狐狸技能的增強!

UML:

三,代理模式的一般用途

1. 遠程代理:

就是未1個對象在不同的地址空間提供局部代理. 隱藏這個對象存在與另1個地址空間的事實.

2.虛擬代理:

根據需要創建開銷很大的對象, 通過虛擬代理來存放實例化需要很長時間的真實對象.

3.安全代理

用來控制對真實對象訪問的權限.(也就是本文例子, 狗只能找熊談談, 不會直接找狐狸)

Copyright © Linux教程網 All Rights Reserved