門面模式php
理解3個概念:laravel
1)Container的概念,laravel全部的服務都註冊在container裏面,至於如何註冊,就是使用service providerredis
2)service provider是用來綁定具體使用的服務,好比用MySQL數據庫,仍是Redis數據庫,而後使用$this->app->bind進行綁定,以此實現鬆耦合,切換數據庫比較方便。數據庫
3)facade用來提供統一的接口,好比不管你用哪一種cache,redis仍是memcache,客戶端均可以用cache::get()方式來獲取value,至於具體是用了redis仍是memcahe,就看你在sevice provider裏面綁定了哪一個。cache::get()的實現方式是,繼承Facade方法getFacadeAccessor,返回你在容器中綁定的key值,好比cache,而後Facade類會使用php魔術變量__callstatic(),callstatic的邏輯裏面會從container裏解析cache所綁定的服務,就是前面提到的service provider綁定了誰。app
門面模式經過別名調用,返回容器中綁定的key,而這個key對應的是哪一個服務,是經過service provider預先綁定好的。ide