设计模式 | 门面模式 Facade

说明

门面模式又叫外观模式,这个设计模式也比较简单,比较容易理解,其实在我们正常编码中就已经写出了门面模式,但是我们并不知道这个写法是叫门面模式。

门面模式的定义:提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。

简而言之就是请求一个接口 这个接口对应的操作是聚合了多个子系统的操作。这样使得子系统与客户之间是松耦合,更助于对象之间的依赖关系分层。

示例

我想做一个发送通知的操作,那么这个发送其实应该包含发送 短信、socket、推送等,使用者不需要知道这个东西,你只要提供一个门面给他调用即可 就能完成他想要的效果


<?php
/**
 * Created by 憧憬.
 */

interface Message {
    public function send($user);
}

/**
 * 消息门面
 * Class MessageFacade
 */
class MessageFacade
{

    public $sms;

    public $socket;

    public $pusher;

    public function __construct()
    {
        $this->sms = new Sms();
        $this->socket = new Socket();
        $this->pusher = new Pusher();
    }

    /**
     * 发送消息
     * @param $user
     * @author: 憧憬
     */
    public function send($user)
    {
        $this->sms->send($user);
        $this->socket->send($user);
        $this->pusher->send($user);

    }

}


/**
 * 发送短信
 * Class Sms
 */
class Sms implements Message {
    public function send($user)
    {
        echo '发送短信给'. $user;
    }
}

/**
 * 推送socket
 * Class Socket
 */
class Socket implements Message {
    public function send($user)
    {
        echo '发送socket给'. $user;
    }
}

/**
 * 推送消息
 * Class Pusher
 */
class Pusher implements Message {
    public function send($user)
    {
        echo '发送推送给'. $user;
    }
}


(new MessageFacade())->send('憧憬 aoppp.com');

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏