R語言BUGS/JAGS貝葉斯分析: 馬爾科夫鏈蒙特卡洛方法(MCMC)取樣
阿新 • • 發佈:2020-11-19
代理模式控制著對原物件的訪問,並允許在將請求提交給物件前後進行一些處理。
程式碼示例
<?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 操作。當然,這只是最簡單的應用,圍繞這一設計,後續可以做一些更加複雜的場景。
適用場景
- 延遲初始化(虛擬代理):對於一個並不常用並且重量級的服務物件,不必要在程式開始就建立該物件,可以將物件的初始化延遲到真正需要的時候。
- 訪問控制(保護代理):對於一些重要的服務物件,在呼叫之前可以針對性的做一些必要的安全校驗。
- 記錄日誌請求(日誌記錄代理):代理可以在向服務傳遞請求前進行日誌記錄和處理結果的記錄。
- 快取請求結果(快取代理):將請求結果快取,避免多次請求。
- 智慧引用:沒有客戶端適用某重量級物件時立即銷燬該物件。