PHP设计模式--外观模式

本文介绍了软件设计中的外观模式,一种简化复杂子系统接口的方法。通过示例代码展示了如何使用外观模式来提供一个统一的高层接口,使得客户端不必了解子系统的具体细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 外观模式(Facade) 属于7种结构型模式中比较好理解的一种模式,
 主要作用是为客户端提供一个统一的接口,不需要用户自己去创建各子类然后调用他们的方法。
 好处是把子系统的逻辑和交互都隐藏了起来,缺点是每添加一个子类,都有可能要修改外观类(违反开闭原则)。

 起初学习外观模式的时候有点和之前学习过的简单工厂模式混淆。
 因为它们的结构还挺像的,都是提供一个统一的接口,之后看了些资料进行了对比。

 区别
 简单工厂属于创建型模式,更注重创建对象,根据客户端提供的要求,创建相应的对象。
 就像是房产中介,你到了中介说要买一个二室一厅的房子,中介就给你提供一个二室一厅的房子。

 外观模式更像是高级私人订制。

 你到了中介说要买一个房子,中介根据各种情况的衡量,最后给你提供一个两室一厅的房子。

<?php  
  
header("Content-Type:text/html;charset=utf-8");  
// 外观模式 index.php  
require_once "Facade.php";  
  
// 实例化外观类  
$Client = new Facade();  
  
// 直接调用给出方案  
$Client->buy();  
$Client->sell();  

<?php  
      
           
/** 买房 子类      
 *  BuyHouse         
 */    
Class BuyHouse   
{  
  
    function planA(){  
        echo "买入一室一厅的房子。<br/>";  
    }  
  
    function planB(){  
        echo "买入两室一厅的房子。<br/>";  
    }  
  
    function planC(){  
        echo "买入别墅。<br/>";  
    }  
}  
  
  
/** 卖房 子类      
 *  SellHouse         
 */  
Class SellHouse   
{  
    function planA(){  
        echo "高收益卖出房子。<br/>";  
    }  
    function planB(){  
        echo "低收益卖出房子。<br/>";  
    }  
}  
  
/** 统一接口 外观类      
 *  Facade         
 */  
Class Facade {  
    private $BuyHouse;  
    private $SellHouse;  
  
    function __construct(){  
        $this->BuyHouse = new BuyHouse();  
        $this->SellHouse = new SellHouse();  
    }  
  
    function buy(){  
        $this->BuyHouse->planB();  
    }  
    function sell(){  
        $this->SellHouse->planA();  
    }  
}
<span style="color:rgb(0,0,0);font-family:'Microsoft YaHei';font-size:14px;">输出结果:</span>  

<span style="color:rgb(0,0,0);font-family:'Microsoft YaHei';font-size:14px;">买入两室一厅的房子。</span><br style="color:rgb(0,0,0);font-family:'Microsoft YaHei';font-size:14px;"><span style="color:rgb(0,0,0);font-family:'Microsoft YaHei';font-size:14px;">高收益卖出房子。</span>  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值