歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java代理模式(Proxy)簡介

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