外观模式(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;
}
输出:
标签:__,外观,封装,接口,Facade,模式,facade,子系统 From: https://www.cnblogs.com/yuandonghua/p/17685773.html