门面模式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