设计模式-外观模式与组合模式

设计模式-外观模式与组合模式,第1张

1. 外观模式

        顾名思义,外观模式就是说将这个类的内部执行流程都进行了封装,程序员只能够“外部”接口进行 *** 作,而具体的执行过程并不可见。比如我们写的C++代码在生成可执行文件的过程之通常要经过预处理、编译、汇编与链接四个步骤,但是在windows的VSCode编译器下我们并不需要 *** 心以上四个流程,我们只需要点击运行就能够得到可执行程序。因此,在VSCode类中,只需要在公共接口中依次进行上述四个步骤即可对现有代码进行运行。

        下面就是整个流程代码:

#include 

using namespace std;

class Preprocessing{
public:
    void show(){
        cout << "这是预处理" << endl;
    }    
};

class Compiler{
public:
    void show(){
        cout << "这是编译器" << endl;
    }    
};

class Assembler{
public:
    void show(){
        cout << "这是汇编" << endl;
    }    
};

class Linker{
public:
    void show(){
        cout << "这是链接" << endl;
    }    
};

class VSCode{
public:
    void run(){
        Preprocessing* pre = new Preprocessing();
        Compiler* com = new Compiler();
        Assembler* ass = new Assembler();
        Linker* lin = new Linker();
        pre->show();
        com->show();
        ass->show();
        lin->show();
    }
};

int main(){
    VSCode* vscode = new VSCode();
    vscode->run();
    return 0;
}

        下面就是运行结果:

 2. 组合模式

         组合模式的出现是为了处理树状的关系组织,比如学校各个部门与学校的关系、公司各个部门与公司的关系,这都可以看做是一个树状结构,而组合模式就可以很好的处理这些关系。借用二叉树中的概念,公司就可以看做是一个根节点,而下面的部分就可以看做是一个子节点,它们都有一个功能的基类,就是节点类。

2.1 根节点类

        在根节点类(Department)中,主要使用list容器存储其下属的所有部分。

#include 
#include 

using namespace std;

class Department{
protected:
    list container;
public:
    Department(){};
    virtual ~Department(){};
    virtual void attach(Department* department){
        container.push_back(department);
    }
    virtual void show() = 0;
    virtual void info(){
        for(list::iterator it = container.begin(); it != container.end(); ++it){
            (*it)->show();
        }
    }
};
2.2 其他子节点的实现

        在其他子节点中,所写的方法也加上virtual,这是因为当前的子节点可能会作为其他子节点的根节点,所以说为了继承,每个子节点的成员函数都需要加上virtual关键字

class School:public Department{
public:
    virtual void show(){
        cout << "这里是学校" << endl;
    }
};

class CSSchool:public Department{
public:
    virtual void show(){
        cout << "这里是计算机学院" << endl;
    }
};

class ICSchool:public Department{
public:
    virtual void show(){
        cout << "这里是信控学院" << endl;
    }
};
2.3 主函数测试结果

        下面就是测试代码以及测试结果:

int main(){
    School* school = new School();
    CSSchool* cs = new CSSchool();
    ICSchool* ic = new ICSchool();
    school->attach(cs);
    school->attach(ic);
    school->info();
    return 0;
}

        

3. 参考文献

(1)  设计模式C++实现(7)——外观模式、组合模式_wuzhekai1985的博客-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存