首页后端开发JAVAphp设计模式(十二):外观模式(Facade)

php设计模式(十二):外观模式(Facade)

时间2023-07-06 05:28:02发布访客分类JAVA浏览1319
导读:外观模式外观模式又称:门面模式、Facade。外观 是一种 结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。这么说你肯定会懵,简单接口?啥???。在面向对象框架中我们使用的各种扩展包,就巧妙的利用了门面模式,大部分拓展包我们...

外观模式

外观模式又称:门面模式、Facade。外观 是一种 结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。这么说你肯定会懵,简单接口?啥???。在面向对象框架中我们使用的各种扩展包,就巧妙的利用了门面模式,大部分拓展包我们都只要引用他的 一个类 就可执行 所有的方法,看拓展包源码你会发现源码文件这么多类?怎么我们使用时只要引入一个类???这其实就是 外观模式,将所有的内部类封装成一个类,供外部使用

问题

在学校里,我们需要每个班派代表去参加 羽毛球赛,一直都是直接到各个班级去喊人,第二又开展了 乒乓球赛,我们也要去各个班级喊人,而且我们每次喊的人呢?不一定是会打 羽毛球 或者 乒乓球的,我们去喊的时候并不知道我们喊的人会不会 羽毛球 或者 乒乓球

解决方法

像上述情况耦合非常强,每次我们都要去了解会不会打 羽毛球 或者 乒乓球,而且每次喊的人都需要我们去安排谁先上场,这样我们可能会把实力强的给淹没。解决办法就是我们每个班我们只找班长(门面类),不管是 羽毛球乒乓球,我们找 班长 安排,顺序 也找班长安排,这样我们每次只需要找班长就行,也不要知道班级谁最厉害,谁先上场。班长就是班级的门面,有事找他就对了。

结构

SubSystem: 子系统 示例中指:张三、李四、王五 ; Facade: 外观对象 示例中指:班长 ;

UML

代码示例

班长类

class MonitorFacade
{
    
    protected $zhansan;
    
    protected $lisi;
    
    protected $wangwu;


    public function __construct()
    {
    
        $this->
    zhansan = new ZhangSan();
    
        $this->
    lisi = new LiSi();
    
        $this->
    wangwu = new WangWu();

    }


    public function getName()
    {
    
        return '班长';

    }


    /**
     * 羽毛球
     * @return string
     * @author chendashengpc
     */
    public function badminton()
    {
    
        return $this->
    zhansan->
    getName() .'、'. $this->
    lisi->
    getName();

    }


    /**
     * 乒乓球
     * @return string
     * @author chendashengpc
     */
    public function ableTennis()
    {
    
        return $this->
    wangwu->
    getName() .'、'. $this->
    lisi->
    getName();

    }

}

班级成员类

张三

/**
 * 张三
 */
class ZhangSan
{

    public function getName()
    {
    
        return '张三';

    }

}

李四

/**
 * 李四
 */
class LiSi
{

    public function getName()
    {
    
        return '李四';

    }

}

王五

/**
 * 王五
 */
class WangWu
{

    public function getName()
    {
    
        return '王五';

    }

}
    

客户端使用

/**
 * 实例化班长类
 */
$facade = new MonitorFacade();
    
/**
 * 参加乒乓球赛的人员
 */
echo '参加乒乓球赛的人员:' . $facade->
    ableTennis() . PHP_EOL;
    

/**
 * 参加羽毛球赛人员
 */

echo '参加羽毛球赛人员:' . $facade->
    badminton() . PHP_EOL;
    

输出

参加乒乓球赛的人员:王五、李四
参加羽毛球赛人员:张三、李四

优缺点

优点

  • 可以让代码独立于复杂子系统。

缺点

  • 外观可能成为与程序中所有类都耦合的上帝对象。(班级离开班长就无计可施了)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

php接口框架设计模式源码

若转载请注明出处: php设计模式(十二):外观模式(Facade)
本文地址: https://pptw.com/jishu/291340.html
PHP GC 回收机制学习 PHP 入门基础漏洞

游客 回复需填写必要信息