1、定义:
- 1.1 外观模式(Facade Pattern)
即一个系统的外部与内部的通信必须通过一个统一的对象进行,将所有的功能,封装在一个类中,使得子系统更易于使用。
-
1.2 作用
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 -
1.3 主要解决:
降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
2 、使用示例
以日常生活中例子作为参考,手机最开始则为相机功能,打电话功能,随着科技的进步,出现了视频通话,而在这个过程中,即要调用相机功能,有要调用打电话功能,所以出现微信这个门面,将打电话和打开相机录像等一系列操作,全都封装在视频通话这个功能里面,接下来以这个例子,来看看外观模式,是如何使用的。

- 2.1 提供给客户端唯一的交互类
public class MobliePhone {
private Phone mPhone=new PhoneImpl();
private Camera mCamera=new CameraImpl();
/**
* 视频聊天
*/
public void videoChat(){
System.out.println("-->视频浏览");
mCamera.open();
mPhone.dail();
}
/**
* 挂断电话
*/
public void hangup(){
mPhone.hangup();
}
/**
* 拍照
*/
public void takepic(){
mCamera.open();
mCamera.takepicture();
}
/**
* 关闭相机
*/
public void colseCamera(){
mCamera.close();
}
}
- 2.2 打电话功能封装
public interface Phone {
/**
* 响铃
*/
void dail();
/**
* 挂断
*/
void hangup();
}
- 2.3 电话功能具体实现:
public class PhoneImpl implements Phone {
@Override
public void dail() {
System.out.println("打电话");
}
@Override
public void hangup() {
System.out.println("挂断");
}
}
- 2.4 照相功能定义
public interface Camera {
/**
* 打开相机
*/
void open();
/**
* 拍照
*/
void takepicture();
/**
* 关闭相机
*/
void close();
}
- 2.5 相机具体实现:
public class CameraImpl implements Camera {
@Override
public void open() {
System.out.println("打开相机");
}
@Override
public void takepicture() {
System.out.println("拍照");
}
@Override
public void close() {
System.out.println("关闭相机");
}
}
- 2.6 客户端使用:
public class Test {
public static void main(String[] args) {
MobliePhone mobliePhone = new MobliePhone();
mobliePhone.takepic();
mobliePhone.videoChat();
mobliePhone.colseCamera();
mobliePhone.hangup();
}
}
3、在来看看在Android外观模式:
如果你从事Android开发,肯定接触过图片加载框架Glide,在来看看外观模式在Glide中的使用。都知道Glide是一件非常优秀的图片加载框架,当然随着版本的迭代,功能非常的丰富,但是对于开发者使用,但是永远都是一句话简单。
private final Engine engine;
private final BitmapPool bitmapPool;
private final MemoryCache memoryCache;
private final BitmapPreFiller bitmapPreFiller;
private final GlideContext glideContext;
private final Registry registry;
private final ArrayPool arrayPool;
private final RequestManagerRetriever requestManagerRetriever;
private final ConnectivityMonitorFactory connectivityMonitorFactory;
private final List<RequestManager> managers = new ArrayList<>();
private MemoryCategory memoryCategory = MemoryCategory.NORMAL;
从Glide中的源码可以看出,里面封装了特别多的功能,包括图片的缓存,请求队列的缓存池,垃圾回收机制等等,但是我们使用的话,仅仅简单的一句话。
网友评论