1. 程式人生 > 實用技巧 >R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)取樣

R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)取樣

代理模式控制著對原物件的訪問,並允許在將請求提交給物件前後進行一些處理

程式碼示例

<?php

interface subject
{
    public function request();
}

//原服務
class realSubject implements subject
{
    public function request()
    {
        echo 'realSubject handle request';
    }
}

class proxy implements subject
{
    //申明成員變數,用來儲存引用物件
    private
$realSubject; public function __construct(realSubject $realSubject) { $this->realSubject = $realSubject; } //將請求提交給原物件前後做一些處理 public function request() { if ($this->checkAccess()){ $this->realSubject->request(); $this->logAccess(); } }
private function checkAccess() { echo 'proxy check access'; return true; } private function logAccess() { echo 'proxy log access'; } } //客戶端呼叫 $realSubject = new realSubject(); $realSubject->request(); // realSubject handle request $proxy
= new proxy($realSubject); $proxy->request(); //1、proxy check access 2、realSubject handle request 3、proxy log access

從示例中可以明顯看出,在將請求交給原物件之前,做了 check 操作,請求完了之後,又做了 log 操作。當然,這只是最簡單的應用,圍繞這一設計,後續可以做一些更加複雜的場景。

適用場景

- 延遲初始化(虛擬代理):對於一個並不常用並且重量級的服務物件,不必要在程式開始就建立該物件,可以將物件的初始化延遲到真正需要的時候。

- 訪問控制(保護代理):對於一些重要的服務物件,在呼叫之前可以針對性的做一些必要的安全校驗。

- 記錄日誌請求(日誌記錄代理):代理可以在向服務傳遞請求前進行日誌記錄和處理結果的記錄。

- 快取請求結果(快取代理):將請求結果快取,避免多次請求。

- 智慧引用:沒有客戶端適用某重量級物件時立即銷燬該物件。