12 大话设计模式C++实现之外观模式

筅森魡賤 提交于 2019-12-20 00:40:54

/*
外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用
其中外观类需要了解所有子系统的方法或属性,对它进行组合,以备外界调用。
何时使用外观模式:
首先,在设计阶段初期,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层和表示层的层与层之间建立Facade,
这样可以为系统提供一个简单的接口,使得耦合度大大降低,其次,在开发阶段,子系统往往因为不断地重构烟花而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,
这是好事,但也给外部调用他们的用户程序带来了使用上的困难。增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。
第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须依赖他。此时外观模式是非常适合的。
可以为系统开发一个外观facade类,让新系统与facede对象交互,facade与遗留代码交互所有复杂的工作。
*/
#include<iostream>
#include<string>

using namespace std;

class A
{
public:
    void Method1()
    {
        cout << "A" << endl;
    }
};

class B
{
public:
    void Method2()
    {
        cout << "B" << endl;
    }
};

class C
{
public:
    void Method3()
    {
        cout << "C" << endl;
    }
};

class D
{
public:
    void Method4()
    {
        cout << "D" << endl;
    }
};
class F
{
private:
    A *one;
    B *two;
    C *three;
    D *four;
public:
    F()
    {
        one = new A();
        two = new B();
        three = new C();
        four = new D();
    }
    ~F()
    {
        if (one != NULL)
        {
            delete one;
            one = NULL;
        }
        if (two != NULL)
        {
            delete two;
            two = NULL;
        }
        if (three != NULL)
        {
            delete three;
            three = NULL;
        }
        if (four != NULL)
        {
            delete four;
            four = NULL;
        }
    }
public:
    void MethodinFA()
    {
        one->Method1();
        two->Method2();
    }
    void MethodinFB()
    {
        three->Method3();
        two->Method2();
    }
    void MethodinFC()
    {
        three->Method3();
        four->Method4();
    }
};

void Client()
{
    cout << "根据需要调用不同的方法" << endl;
    F *p = new F();
    p->MethodinFA();
    p->MethodinFB();
    if (p != NULL)
    {
        delete p;
        p = NULL;
    }
}

int main()
{
    Client();
    system("pause");
    return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!