外观模式(Facade)

1、作用

(1)、将各个子系统的接口汇聚在一起,定义一个统一的接口方便客户使用,满足“迪米特法则”,即客户不需要了解子系统,只需要知道Facade模式封装的类即可以使用所有子系统。

(2)、隔离用户和子系统,将用户与子系统解耦,当子系统有修改是,顶多修改Facade模式封装的类,无需修改用户代码。

2、实现方式

这个模式有点像适配器模式。

相同点:都是接口在套一层接口。

不同点:(1)、适配器模式,外层接口与内存层接口不一样,而外观模式一般是内存接口和外层接口一样,甚至名字都一样。

              (2)、适配器模式只封装一个接口,外观模式则是封装很多子系统的接口。

下面以一个MobilePhone的大系统通过Facade模式封装子系统功能的UML图:Facade就是系统封装子系统的接口,用户通过调用系统层(Facade)的接口来调用子系统。

3、C++代码

MobilePhone.h

#include <iostream>


#ifndef __MOBILE_PHONE__H__
#define __MOBILE_PHONE__H__

using namespace std;


class BaseBand {
    public:
        void call() { cout<<"打电话..."<<endl; }
        void hungup() { cout<<"挂电话..."<<endl; }
};


class Camera {
    public:
        void takePicture() { cout<<"拍照片"<<endl; }
};


class MobilePhone {
    public:
        void call() { baseBand.call(); }
        void hungup() { baseBand.hungup(); }
        void takePicture() { camera.takePicture(); }
    private:
        BaseBand baseBand;
        Camera   camera;
};


#endif

test.cc

#include "MobilePhone.h"

int main() {
    MobilePhone mobilePhone;
    mobilePhone.call();
    mobilePhone.hungup();
    mobilePhone.takePicture();


    return 0;
}

输出:

原文地址:https://www.cnblogs.com/yuandonghua/p/11888242.html