C++设计模式之外观模式

2020-01-06 12:58:17刘景俊

          CGenMidCode genMidCode;
          CGenAssemblyCode genAssemblyCode;
          CLinkSystem linkSystem;
          syntaxParser.SyntaxParser();
          genMidCode.GenMidCode();
          genAssemblyCode.GenAssemblyCode();
          linkSystem.LinkSystem();
     }
};
 
// 客户端
int main()
{
     Facade facade;
     facade.Compile();
}

 

上面的代码很简单。我们可以想象,如果没有使用外观模式,在客户端如果要进行Compile同样的动作时,就需要写一堆和Compile中一样的代码;是的,你会说,写就写吧。但是,有的时候,客户端并不会非常熟悉子系统之间的关系,就好比,先要进行语法分析,再生成中间代码,然后生成汇编语言,最后进行链接一样。如果客户端不知道这个时序,那怎么办?所以,外观模式让一切复杂的东西,使用起来都变的简单了。

优点

1.它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目,并使得子系统使用起来更加方便;

2.它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的;松耦合系统使得子系统的组件变化不会影响到它的客户。外观模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。外观模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。

使用场合

1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变的越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具有可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。外观模式可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层;

2.当客户程序与抽象类的实现部分之间存在很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性;