23种设计模式-外观模式
概述
外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口。外部程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
结构
外观模式包含以下角色:
- 外观角色:为多个子系统对外提供一个共同的接口
- 子系统角色:实现系统的部分功能,客户可以通过外观角色访问它
实现
/**
* 比如有一个子系统,我需要导出数据去做年终总结,那我需要导出订单相关数据和用户相关数据
*/
interface Export {
public function export();
}
/**
* 用户数据导出类
*/
class UserExport implements Export
{
public function export()
{
echo '导出用户数据';
}
}
/**
* 订单数据导出类
*/
class OrderExport implements Export
{
public function export()
{
echo '导出订单数据';
}
}
/**
* 导出门面类
*/
class ExportFacade
{
public function __construct(public Export $userExport, public Export $orderExport)
{
}
public function export()
{
$this->userExport->export();
$this->orderExport->export();
}
}
// 测试
$exportService = new ExportFacade(new UserExport(), new OrderExport());
$exportService->export();