Structural.Facade外观模式:实现一键式操作

外观模式的结构和说明


①Façade:定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系统对象

  ②模块:接受Façade对象的委派,真正实现功能,各个模块之间可能有交互。但请注意,Façade对象知道各个模块,但是各个模块不应该知道Façade对象。

思考外观模式

  ①外观模式的本质封装交互、简化调用。Façade封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用,通过外观,子系统为外部提供一些高层的接口,以方便它们的使用。它很好的体现了“最少知识原则(DoL)”

  ②外观模式的目的:外观模式的目的不是给子系统添加新的功能接口,而是为了让外部减少与子系统内部多个模块的交互,松散耦合,从而让外部能够更简单地使用子系统

  ③Façade表面上看只是把客户端的代搬到了Façade里,但是有本质上的区别。因为Façade位于系统而不是客户端的一侧,它相当于屏蔽了外部客户端和系统内部模块的交互,同时Façade可以被多个客户端调用,实现复用

  ④外观是当作子系统对外的接口出现的,虽然可以在这里定义一些子系统没有的功能,但不建议这样做。外观应该是包装己有的功能,而不是添加新的功能。因为有时客户端可能需要绕开Façade,直接调用某个具体模块。而如果在Façade中添加新的功能,但可能最后调用的结果是不同的。

  ⑤外观可以提供一些缺省的功能实现。

【编程实验】注册公司(通过外观模式提供简化的办理流程)

//声明文件

//结构型模式:外观模式
//场景:注册公司。

#include <iostream>

using namespace std;

//质检局:Quality Supervision Burean
class CQualitySupervisionBurean{
public:
	void OrgCodeCertificate();
};

//工商局:Industrial and Commercial Bureau
class CIndustrialAndCommercialBureau{
public:
	void CheckConflictName();
};

//税务局: Tax Bureau;
class CTaxBureau{
public:
	void TaxCertificate();
};

//银行:Bank;
class CChinaBank{
public:
	void OpenAccount();
};


//提供一个外观类(注册公司)
class CRegisterFacade{
private:
	CQualitySupervisionBurean* pQualitySupervisionBurean;
	CIndustrialAndCommercialBureau* pIndustrialAndCommercialBureau;
	CTaxBureau* pTaxBureau;
	CChinaBank* pChinaBank;
public:
	CRegisterFacade();
	void RegistCompany();
	~CRegisterFacade();
};

//实现文件

//质检局:Quality Supervision Burean
void CQualitySupervisionBurean::OrgCodeCertificate(){ cout << "到质检局办理组织机构代码证" << endl;}

//工商局:Industrial and Commercial Bureau
void CIndustrialAndCommercialBureau::CheckConflictName(){ cout << "到工商局检查名字是否冲突" << endl; }


//税务局: Tax Bureau;:
void CTaxBureau::TaxCertificate(){ cout << "到税务局办理税务登记证" << endl; }


//银行:Bank;
void CChinaBank::OpenAccount(){ cout << "到银行开户" << endl; }


//提供一个外观类(注册公司)
CRegisterFacade::CRegisterFacade(){
	pQualitySupervisionBurean = new CQualitySupervisionBurean();
	pIndustrialAndCommercialBureau = new CIndustrialAndCommercialBureau();
	pTaxBureau = new CTaxBureau();
	pChinaBank = new CChinaBank();
}
void CRegisterFacade::RegistCompany(){
	pQualitySupervisionBurean->OrgCodeCertificate();
	pIndustrialAndCommercialBureau->CheckConflictName();
	pTaxBureau->TaxCertificate();
	pChinaBank->OpenAccount();
}
CRegisterFacade::~CRegisterFacade(){
	delete pQualitySupervisionBurean;
	delete pIndustrialAndCommercialBureau;
	delete pTaxBureau;
	delete pChinaBank;
}

//测试客户端

void main()
{
	CRegisterFacade oRegisterFacade; oRegisterFacade.RegistCompany();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值