c++/qt设计模式-外观模式

文章中部分内容和思路来自《Head First设计模式》


模式定义

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。


模式类图

c++/qt设计模式-外观模式


典型案例

1.案例说明

在我们使用电脑的过程中,我们只需要按下电源键整个电脑就能正常开机工作。关于机器内部各部件的工作情况我们并不关心,这就是外观模式的一种体现。


2.代码实现

----------

Computer.h

----------

#ifndef COMPUTER_H
#define COMPUTER_H


class Computer
{
public:
    Computer();

public:
    void work();
};

#endif // COMPUTER_H
 

------------

Computer.cpp

------------

#include "Computer.h"

#include "Cpu.h"
#include "Disk.h"
#include "Memory.h"

Computer::Computer()
{

}

void Computer::work()
{
    // 是否要放到成员函数,个人感觉没必要
    Cpu cpu;
    Disk disk;
    Memory memory;
    cpu.work();
    disk.work();
    memory.work();
}
 

-----

Cpu.h

-----

#ifndef CPU_H
#define CPU_H


class Cpu
{
public:
    Cpu();

public:
    void work();
};

#endif // CPU_H

 

-------

Cpu.cpp

-------

#include "Cpu.h"

#include <QDebug>

Cpu::Cpu()
{

}

void Cpu::work()
{
    qDebug() << "cpu work.";
}

 

------

Disk.h

------

#ifndef DISK_H
#define DISK_H


class Disk
{
public:
    Disk();

public:
    void work();
};

#endif // DISK_H

 

--------

Disk.cpp

--------

#include "Disk.h"

#include <QDebug>

Disk::Disk()
{

}

void Disk::work()
{
    qDebug() << "disk work.";
}

 

--------

Memory.h

--------

#ifndef MEMORY_H
#define MEMORY_H


class Memory
{
public:
    Memory();

public:
    void work();
};

#endif // MEMORY_H

 

----------

Memory.cpp

----------

#include "Memory.h"

#include <QDebug>

Memory::Memory()
{

}

void Memory::work()
{
    qDebug() << "memery work.";
}

 

--------

main.cpp

--------

/**
 * 设计模式-外观模式
 * 要点:1,外观类 2,分系统类
 */
#include <QCoreApplication>

#include "Computer.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Computer cp;
    cp.work(); // poweron, poweroff

    return a.exec();
}