外观模式:为子系统中的一组接口提供一个一致的界面。此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

在软件开发中,有时候为了完成一项较为复杂的功能,一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体出现,由于涉及到的类比较多,导致使用时代码较为复杂,此时,特别需要一个类似电脑组装公司一样的角色,由它来负责和多个业务类进行交互,而客户类只需与该类交互。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类充当了软件系统中的“电脑组装公司”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。在外观模式中,那些需要交互的业务类被称为子系统(Subsystem)。如果没有外观类,那么每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大,而引入外观类之后,客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度

在开发阶段,子系统往往因为不断地重构演化而变得越来越复杂,使用外观模式可以提供一个简单的接口,减少它们之间的依赖。  在维护一个大型系统时,可能这个系统已经非常难以维护了和扩展了,我们可以为这个系统增加一个外观Facade类,来提供遗留代码的比较清晰的接口,让新系统与Facade对象交互,Facade则与遗留代码进行交互。

代码:

#include <iostream>
using namespace std; class Shopper
{
public:
void shop()
{
cout << "买菜" << endl;
}
}; class Cook
{
public:
void cook()
{
cout << "做饭" << endl;
}
}; class DishWasher
{
public:
void washDish()
{
cout << "洗碗" << endl;
}
}; class Restaurant
{
public:
void makemeal()
{
_shopper.shop();
_cook.cook();
_dishwasher.washDish();
}
private:
Shopper _shopper;
Cook _cook;
DishWasher _dishwasher;
}; void test()
{
Restaurant rs;
rs.makemeal();
} int main()
{
test();
cin.get();
return ;
}

最新文章

  1. R语言 入门知识--常用操作和例子
  2. Redis常用命令
  3. 用Pyinstaller打包发布exe应用
  4. HTTP协议详解(经典)
  5. [ZZ] MATLAB中Legend的一些控制方法
  6. Oracle SQL 劈开字符串
  7. 集群服务器Session同步
  8. Java基础(二十三)GUI图形界面编程(Java基础完)
  9. iOS学习之数据请求
  10. Objective-C Http常用API 同步请求与异步请求
  11. Python字符串和日期相互转换的方法
  12. 如何向android studio中导入第三方类库
  13. C#实现按键弹出查询窗口
  14. Python--抽象类接口类
  15. 雨燕apply项目总结
  16. C#以太坊基础入门
  17. Java12-java语法基础(十一)继承
  18. programmatically detect whenever test run is in debug mode
  19. SaltStack 入门到精通第二篇:Salt-master配置文件详解
  20. 1 python 文件处理

热门文章

  1. box布局中文字溢出问题
  2. 基础练习 2n皇后问题
  3. loopback 代码解析
  4. Go Example--switch
  5. mysql再探
  6. java_main
  7. ThinkPHP3 和 ThinkPHP5 不是一个团队做的
  8. mysql之 重建GTID下主从关系
  9. MySQL5.6新特性之Multi-Range Read
  10. Maven项目main和test文件夹说明