设计模式之外观模式

什么是外观模式

我觉得这是最容易理解的一个设计模式了。就是把多个方法的调用封装到一起,方便调用。

使用场景

比如人People、车Car、桥Bridge这三个对象,要实现一个简单的场景---24岁的人,姓名叫李四,开着红色的车在石桥上跑。

如果用传统方式来做,那么每次实现这个场景的时候,都需要实例化People、Car、Bridge这三个类,然后去调用设置名字、设置年龄、设置性别、设置车的颜色、设置桥的种类这6种方法。

想象以下前后端对接的场景,这种情况就要提供六个接口给前端,无疑增大了前后端的工作量,令人烦躁。

但是如果这些方法封装到一个方法里,只提供一个接口给前端,岂不快哉。

 

示意图

设计模式之外观模式_第1张图片

 设计模式之外观模式_第2张图片

 优点

减少了工作量,方便管理

缺点

不符合开闭原则

代码实例

目录结构

设计模式之外观模式_第3张图片

 People.php 人

name = $name;

        return $this;
    }

    /**
     * 设置性别
     * @param mixed $sex
     */
    public function setSex($sex)
    {
        $this->sex = $sex;

        return $this;
    }

    /**
     * 设置年龄
     * @param mixed $age
     */
    public function setAge($age)
    {
        $this->age = $age;

        return $this;
    }
}

 Car.php 车

color = $color;

        return $this;
    }
}

Bridge.php 桥

bridge = $bridge;

        return $this;
    }
}

Facade.php 外观类

setName($name);
        $people->setSex($sex);
        $people->setAge($age);
        $car = new Car();
        $car->setColor($color);
        $bridgeOb = new Bridge();
        $bridgeOb->setBridge($bridge);

        echo $people->age.'的'.$people->sex.',名字叫'.$people->name.',开着'.$car->color.'的车在'.$bridgeOb->bridge.'跑';
    }
}

client.php 调用

setName('李四');
$people->setSex('男人');
$people->setAge('24');
$car = new Car();
$car->setColor('红色');
$bridgeOb = new Bridge();
$bridgeOb->setBridge('石桥');

echo $people->age.'的'.$people->sex.',名字叫'.$people->name.',开着'.$car->color.'的车在'.$bridgeOb->bridge.'跑';

echo '
'; //外观模式 $facade = new Facade(); $facade->action('李四','男人','24','红色','石桥');

运行结果

设计模式之外观模式_第4张图片

 

你可能感兴趣的:(设计模式,外观模式,设计模式)