外观模式
定义:
提供统一入口来操作子系统,避免客户端与各个子系统的耦合性
优点:
(1)对客户端屏蔽各子系统,减少之间的耦合
(2)子系统的修改也不会影响到外观对象
缺点:
(1)外观模式未能很好限制客户端直接使用子系统
使用范围:
当需访问多粒度的子系统或者子流程情况
如:BS模式的主界面或者导航页面
结构:
实现:
namespace structural_pattern
{
class A_sub_system
{
public:
void do_a() { std::cout << "A子系统-A方法" << std::endl; }
};
class B_sub_system
{
public:
void do_b() { std::cout << "B子系统-B方法" << std::endl; }
};
class C_sub_system
{
public:
void do_c() { std::cout << "C子系统-C方法" << std::endl; }
};
class facade_pattern
{
public:
void do_action()
{
A_sub_system asub;
B_sub_system bsub;
C_sub_system csub;
asub.do_a();
bsub.do_b();
csub.do_c();
}
};
}
测试:
基于GoogleTest 的单元测试框架;框架可参考如下网址:
https://www.cnblogs.com/jycboy/p/gtest_catalog.html
using namespace structural_pattern;
TEST(test_facade_pattern_do_action, success_connect_A_B_C_system)
{
facade_pattern facede;
facede.do_action();
}
总结
(1)通过外观类提供统一的入口
(2)考虑与代理模式区别,代理模式是1对1执行同一件事,外光模式是1对多的多个动作集成