概念
提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。
本质:
就是化零为整;引入一个中介类,把各个分散的功能组合成一个整体,只对外暴露一个统一的接口。
其实门面模式这个思想在现实生活中到处都是,几乎我们使用的每个产品都是由很多小的子系统组合而成,但是每个产品都对外提供了统一的用户接口。
比如我们要在淘宝买东西,我基本上只需要鼠标点一些按钮就完成了,但是实际上网站的后台是很多个子系统一起去完成你购买商品的任务的,比如网站系统,购物车系统,订单系统,用户中心系统,支付系统。这些系统对外通过了统一的接口,让你在网站上点按钮就可以完成买东西的需求。这就是门面模式。我的理解起这个名称的人关注的是由多个接口不统一的子系统对外提供统一的接口,好像形成了一个界面或者门面一样,所以叫门面模式吧。
商人的水果摊一天的日子如下:
1.水果摊开门
2.取出水果
3.上架水果
4.下架水果
5.放回水果
6.关门
<?php # 水果摊的店门 class Door { //开门 public function open(){echo "开门<br/>";} //关门 public function close(){echo "关门<br/>";} } # 水果摊的货架 class Shelves { //上架水果 public function putOn(){echo "上架水果<br/>";} //下架水果 public function putDown(){echo "下架水果<br/>";} } # 水果 class Fruits { //从保鲜箱中取出水果 public function take(){echo "从保鲜箱中取出水果<br/>";} //将水果放回保险箱中 public function put(){echo "将水果放回保险箱中<br/>";} } //普通方法调用下,水果摊一天的生活是这样的: //营业状态 $door = new Door(); $door->open(); //1.开门 $fruits = new Fruits(); $fruits->take(); //2.取出水果 $shelves = new Shelves(); $shelves->putOn(); //3.上架水果 //打烊状态 $shelves->putDown(); //4.下架水果 $fruits->put(); //5.放回水果 $door->close(); //6.关门 # 门面设计模式 class FruitsLife { protected $door; protected $fruits; protected $shelves; public function __construct() { $this->door = new Door(); $this->fruits = new Fruits(); $this->shelves = new Shelves(); } //营业状态 public function open() { $this->door->open(); //1.开门 $this->fruits->take(); //2.取出水果 $this->shelves->putOn(); //3.上架水果 } //打烊状态 public function close() { $this->shelves->putDown(); //4.下架水果 $this->fruits->put(); //5.放回水果 $this->door->close(); //6.关门 } } #门面设计模式下,水果摊一天的生活是这样的 $fruitsLife = new FruitsLife(); //营业状态 $fruitsLife->open(); //打烊状态 $fruitsLife->close();