定义:
为子系统中的一组接口提供一个一致的界面,此模式定义一个高层接口,这个接口使得这一子系统更加容易使用.
模式结构
- Facade:外观角色
- SubSystem:子系统
模式结构图和时序图:
举个栗子
手机就是一个外观模式的例子,它集合了电话,音乐,视频,拍照等功能于一身。
我们并不需要打电话用固话,听音乐用用 MP3,定位用 GPS 定位器,看视频用 DVD,拍照用相机。完成这些功能只需要在一部手机即可。手机就是一个统一的入口。
你只要买一部 iPhone XR 就可以使用所有的功能:
interface Phone {
void call();
}
interface Camera {
void takePhoto();
}
interface Gps {
void location();
}
interface Video {
void play();
}
interface Music {
void play();
}
class IPhoneXR {
Phone mPhone;
Camera mCamera;
Gps mGps;
Music mMusic;
Video mVideo;
public IPhoneXR() {
mPhone = new PhoneImp();
mCamera = new CameraImp();
mGps = new GpsImp();
mMusic = new MusicImp();
mVideo = new VideoImp();
}
void phone() {
mPhone.call();
}
void takePhoto() {
mCamera.takePhoto();
}
void loaction() {
mGps.location();
}
void playMusic() {
mMusic.play();
}
void playVideo() {
mVideo.play();
}
}
class PhoneImp implements Phone {
@Override public void call() {
Log.d(TAG, "PhoneImp-call()");
}
}
class CameraImp implements Camera {
@Override public void takePhoto() {
Log.d(TAG, "CameraImp-takePhoto()");
}
}
class GpsImp implements Gps {
@Override public void location() {
Log.d(TAG, "GpsImp-location()");
}
}
class MusicImp implements Music {
@Override public void play() {
Log.d(TAG, "MusicImp-play()");
}
}
class VideoImp implements Video {
@Override public void play() {
Log.d(TAG, "VideoImp-play()");
}
}
IPhoneXR xr = new IPhoneXR();
xr.playMusic();