代理模式
為其它的對象提供一種代理,以控制對這個對象的訪問.
Proxy代理模式是一種結構型設計模式,主要解決的問題是:在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由于某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。
代理模式的組成部份:
1.抽象主題 是一個接口.
2.具體主題 要實現抽象主題接口
3.代理主題 要實現抽象主題接口,含有一個主題接口聲明的變量
各組成部份之間的關系:

例子:
1.接口
package proxy;

/**
* <ul>
* <li>Title:[SellWine]</li>
* <li>Description: [賣酒接口]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-2]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
* @version 1.0
*/
public interface SellWine
{
public void sell();
}

2.實現類
package proxy;

/**
* <ul>
* <li>Title:[WineFactory]</li>
* <li>Description: [type of functional description]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-8-2]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
* @version 1.0
*/
public class WineFactory implements SellWine
{

/* (non-Javadoc)
* @see proxy.SellWine#sell()
*/
public void sell()
{
System.out.println("wineFactory賣酒.");
}

}

3.代理類
package proxy;

public class WineFactoryProxy implements SellWine
{
private WineFactory wineFactory;
public WineFactoryProxy()
{
wineFactory = new WineFactory();
}
/* (non-Javadoc)
* @see proxy.SellWine#sell()
*/
public void sell()
{
wineFactory.sell();
}

}

4.測試類
package proxy;

public class Test
{
public static void main(String[] args)
{
WineFactoryProxy wineFactoryProxy = new WineFactoryProxy();
wineFactoryProxy.sell();
}
}

優點:代理模式可以屏比用戶真正請求的對象,使用戶程序和真正對象之間解耦.
為其它的對象提供一種代理,以控制對這個對象的訪問.
Proxy代理模式是一種結構型設計模式,主要解決的問題是:在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由于某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。
代理模式的組成部份:
1.抽象主題 是一個接口.
2.具體主題 要實現抽象主題接口
3.代理主題 要實現抽象主題接口,含有一個主題接口聲明的變量
各組成部份之間的關系:

例子:
1.接口


















2.實現類


























3.代理類




















4.測試類











優點:代理模式可以屏比用戶真正請求的對象,使用戶程序和真正對象之間解耦.