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

  • 相关阅读:
    Java学习——文件和IO流
    Java多线程——ThreadLocal类的原理和使用
    Java多线程——线程八锁案例分析
    Django 模版语法 一
    Django 命令行调用模版渲染
    Django 使用 locals() 函数
    Django 加载 app 中的urls
    Django 传递额外参数及 URL别名
    Django 无名参数与有名参数
    Django 项目中添加静态文件夹
  • 原文地址:https://www.cnblogs.com/ZhouYong-Travel/p/4009152.html
Copyright © 2011-2022 走看看