外观模式(Facade)

ε祈祈猫儿з 提交于 2019-12-06 14:22:50

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;
}

输出:

 

 

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