1. 程式人生 > 實用技巧 >laravel生命週期

laravel生命週期

代理模式

一、簡介

代理模式為其他物件提供一種代理以控制對這個物件的訪問。

二、使用場景

當無法或不想直接訪問某個物件或者訪問某個物件存在困難時可以通過一個代理物件來間接訪問,為了保證客戶端使用的透明性,委託物件與代理物件需要實現相同的介面。

三、簡單實現

這裡以代理上網為例來說明代理模式,我們有時候需要使用某些工具來幫助我們“暢遊網際網路”,這些工具其實就是代理者,看下面示例:

    public interface Internet{
        void online();
    }

    public class Presonal implements Internet{

        @Override
        public void online() {
            Log.i(TAG, "online: surf on the Internet");
        }
    }
    public class InternetProxy implements Internet{
     private Presonal presonal;

        public InternetProxy(Presonal presonal) {
            this.presonal = presonal;
        }

        @Override
        public void online() {
            Log.i(TAG, "online: proxy internet");
            presonal.online();
        }
    }

    public void Test(){
        Presonal presonal=new Presonal();
        InternetProxy internetProxy=new InternetProxy(presonal);
        internetProxy.online();
    }

四、小結

代理模式可以分為靜態代理和動態代理,在Java中提供了InvocationHandler介面來實現動態代理。同時從適用範圍來區分可以分為:

  • 遠端代理 :為某個物件在不同的記憶體地址空間提供區域性代理,是系統可以將server部分實現隱藏一遍client可以不必考慮server的存在
  • 虛擬代理:使用一個代理物件表示一個十分耗資源的物件並在真正需要時才建立
  • 保護代理:使用代理控制對原始物件的訪問,該型別代理常備用於原始物件有不同的訪問控制權限
  • 智慧代理:在訪問原水物件時執行一些自己的附加操作並對指向原始物件的引用計數