概念

提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。
本质:就是化零为整;引入一个中介类,把各个分散的功能组合成一个整体,只对外暴露一个统一的接口。

实例:

商人的水果摊一天的日子如下:
1.水果摊开门
2.取出水果
3.上架水果
4.下架水果
5.放回水果
6.关门

<?php
/**
 * 水果摊的店门
 */
class Door
{
    //开门
    public function open(){}
    //关门
    public function close(){}
}
/**
 * 水果摊的货架
 */
class Shelves
{
    //上架水果
    public function putOn(){}
    //下架水果
    public function putDown(){}
}
/**
 * 水果
 */
class Fruits
{
    //从保鲜箱中取出水果
    public function take(){}
    //将水果放回保险箱中
    public function put(){}
}

//普通方法调用下,水果摊一天的生活是这样的:

//营业状态
$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->opne();
//打烊状态
$fruitsLife->close();

如若时光萧瑟去丶
111 声望9 粉丝

weakChickenPeng.