设计模式之-外观模式
定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得一个子系统更加容易使用。
基本代码:
三个子系统的类
class SubSystem1 { public void MethodA() { Console.WriteLine("子系统方法1”); } } class SubSystem2 { public void MethodB() { Console.WriteLine("子系统方法2”); } } class SubSystem3 { public void MethodC() { Console.WriteLine("子系统方法3”); } }
Facade类
class Facade { SubSystem1 one; SubSystem2 two; SubSystem3 three; public Facade() { one=new SubSystem1 (); two=new SubSystem2 (); three=new SubSystem3 (); } public void MethodA() { one.MethodA(); two.MethodB(); three.MethodC(); }
客户端
static void Main(string[] args) { Facade f=new Facade(); f.MethodA(); f.MethodB(); }
什么时候使用?
首先:在设计初期,应该要又意识的将不同的两个层分离,层与层之间建立外观Facade
其次:在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
最后:在维护一个大型系统时,可能这个系统已经非常难以维护可扩展了,但是它又包含重要功能,新的需求必须依赖它,这时可以为新系统开发一个外观Facade类,让Facade与遗留代码交互所有复杂的工作。
C++的实现方式
#include<iostream> using namespace std; class Scanner { public: void Scan() { cout << "词法分析" << endl; } }; class Parser { public: void Parse() { cout << "语法分析" << endl; } }; class GenMidCode { public: void GenCode() { cout << "产生中间代码" << endl; } }; class GenMachineCode { public: void GenCode() { cout << "产生机器码" << endl; } }; class Compiler { private: Scanner scanner; Parser parser; GenMidCode genMidCode; GenMachineCode genMacCode; public: void Run() { scanner.Scan(); parser.Parse(); genMidCode.GenCode(); genMacCode.GenCode(); } }; int main() { Compiler compiler; compiler.Run(); return 0; }