如果你最近在学习设计模式,你会发现很多设计模式很相似,几乎是一样的,但是名称却不一样,为什么呢?
因为同样的设计思想在不同的场景下人们就会对它有不同的认识,这基本上其实是用来帮助使用者判断在什么场景下该用什么设计模式。
门面模式Facade
今天来学习下门面模式。门面模式是指提供一个统一的接口来调用多个子系统的接口。听起来也没什么复杂的,我来解释下。
理解门面模式
其实门面模式这个思想在现实生活中到处都是,几乎我们使用的每个产品都是由很多小的子系统组合而成,但是每个产品都对外提供了统一的用户接口。
比如我们要在淘宝买东西,我基本上只需要鼠标点一些按钮就完成了,但是实际上网站的后台是很多个子系统一起去完成你购买商品的任务的,比如网站系统,购物车系统,订单系统,用户中心系统,支付系统。这些系统对外通过了统一的接口,让你在网站上点按钮就可以完成买东西的需求。这就是门面模式。我的理解起这个名称的人关注的是由多个接口不统一的子系统对外提供统一的接口,好像形成了一个界面或者门面一样,所以叫门面模式吧。
例子
想千遍,不如做一遍,让我们把代码写起来
<?php
/**
* Author: shanhuhai
* Date: 2017/9/2 21:46
* Mail: 441358019@qq.com
*/
/**
* 订单系统
* Class Order
*/
class Order {
public function run() {
echo "下单".PHP_EOL;
}
}
/**
* 购物车系统
* Class Cart
*/
class Cart {
protected $goods = [];
public function add($good) {
echo "购物车中添加了".$good.PHP_EOL;
array_push($this->goods, $good);
}
}
/**
* 支付系统
* Class Pay
*/
class Pay{
public function run() {
echo "支付订单".PHP_EOL;
}
}
/**
* 用户界面
* Class UserUI
*/
class UserUI {
protected $cart = [];
protected $order ;
protected $pay;
public function __construct() {
$this->cart = new Cart();
$this->order = new Order();
$this->pay = new Pay();
}
/**
* 选择商品
*/
public function buy() {
$this->cart->add('iphone');
$this->cart->add('iPad');
$this->order->run();
$this->pay->run();
}
}
$userui = new UserUI();
$userui->buy();
看起来,好像很简单,将多个对象组合起来完成了一个购买商品的功能,这就是门面模式,所以学东西不要被名词给蒙蔽了,要能认识到他到底在说什么。
转载请注明:大后端 » php设计模式之——门面模式