设计模式之外观模式

什么是外观模式

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

使用场景

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

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

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

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

 

示意图

 

 优点

减少了工作量,方便管理

缺点

不符合开闭原则

代码实例

目录结构

 People.php 人

<?php
class People{
    public $name;//名字
    public $sex;//性别
    public $age;//年龄

    /**
     * 设置名字
     * @param mixed $name
     */
    public function setName($name)
    {
        $this->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 车

<?php
class Car{
    public $color;//颜色

    /**
     * 设置颜色
     * @param mixed $color
     */
    public function setColor($color)
    {
        $this->color = $color;

        return $this;
    }
}

Bridge.php 桥

<?php
class Bridge{
    public $bridge;//种类

    /**
     * 设置种类
     * @param mixed $bridge
     */
    public function setBridge($bridge)
    {
        $this->bridge = $bridge;

        return $this;
    }
}

Facade.php 外观类

<?php
class Facade{
    /**
     * 封装该场景需要用到的所有方法
     * @param $name
     * @param $sex
     * @param $age
     * @param $color
     * @param $bridge
     */
    function action($name,$sex,$age,$color,$bridge){
        $people = new People();
        $people->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 调用

<?php
require_once 'Car.php';
require_once 'People.php';
require_once 'Bridge.php';
require_once 'Facade.php';

//传统模式
$people = new People();
$people->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 '<br>';

//外观模式
$facade = new Facade();

$facade->action('李四','男人','24','红色','石桥');

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对这是我的昵称

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值