设计模式-1.7外观模式

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

 外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构。

 1 class Scanner
 2 {
 3 public:
 4     void Scan() { cout<<"词法分析"<<endl; }
 5 };
 6 class Parser
 7 {
 8 public:
 9     void Parse() { cout<<"语法分析"<<endl; }
10 };
11 class GenMidCode
12 {
13 public:
14     void GenCode() { cout<<"产生中间代码"<<endl; }
15 };
16 class GenMachineCode
17 {
18 public:
19     void GenCode() { cout<<"产生机器码"<<endl;}
20 };
21 //高层接口
22 class Compiler
23 {
24 public:
25     void Run() 
26     {
27         Scanner scanner;
28         Parser parser;
29         GenMidCode genMidCode;
30         GenMachineCode genMacCode;
31         scanner.Scan();
32         parser.Parse();
33         genMidCode.GenCode();
34         genMacCode.GenCode();
35     }
36 };
1 int main()
2 {
3     Compiler compiler;
4     compiler.Run();
5     return 0;
6 }

       这就是外观模式,它有几个特点(摘自DP一书),(1)它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。(2)它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。(3)如果应用需要,它并不限制它们使用子系统类。

       结合上面编译器这个例子,进一步说明。对于(1),编译器类对客户屏蔽了子系统组件,客户只需处理编译器的对象就可以方便的使用子系统。对于(2),子系统的变化,不会影响到客户的使用,体现了子系统与客户的松耦合关系。对于(3),如果客户希望使用词法分析器,只需定义词法分析的类对象即可,并不受到限制。

原文地址:https://www.cnblogs.com/ZhouYong-Travel/p/4009152.html