设计模式之-外观模式

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

 

 基本代码:

三个子系统的类

class SubSystem1
{
    public void MethodA()
    {
        Console.WriteLine("子系统方法1”);
    }
}
class SubSystem2
{
    public void MethodB()
    {
        Console.WriteLine("子系统方法2”);
    }
}
class SubSystem3
{
    public void MethodC()
    {
        Console.WriteLine("子系统方法3”);
    }
}
View Code

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();
    }
View Code

客户端

static void Main(string[] args)
{
    Facade f=new Facade();
    f.MethodA();
    f.MethodB();
}
View Code

 

什么时候使用?

首先:在设计初期,应该要又意识的将不同的两个层分离,层与层之间建立外观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;
}
View Code

 

posted @ 2021-09-04 10:55  HelloWorld庄先生  阅读(16)  评论(0编辑  收藏  举报