• 设计模式-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),如果客户希望使用词法分析器,只需定义词法分析的类对象即可,并不受到限制。

  • 相关阅读:
    电路维修 (广搜变形-双端队列bfs)
    靶形数独 (dfs+预处理+状态压缩)
    埃及分数问题(带乐观估计函数的迭代加深搜索算法-IDA*)
    weight (搜索对象的选取)
    Codeforces Round #506 (Div. 3)
    生日蛋糕 (poj1190) (dfs剪枝)
    校内模拟赛题面
    NOIP2013 D1T3 货车运输 zz耻辱记
    NOIP2011 D2T3 观光公交 做题笔记
    ARC 103
  • 原文地址:https://www.cnblogs.com/ZhouYong-Travel/p/4009152.html
Copyright © 2020-2023  润新知