外观模式
概述
- 在实际开发中,我们都会用到外观模式,它通过一个外观类使整个系统的结构只有一个统一的高层接口,这样降低用户的使用成本。
- 外观模式的精髓在于封装二字,通过一个高层次结构为用户提供统一的API入口,使得用户通过一个类型就基本能够操作整个系统,这样减少了用户的使用成本,提供系统的灵活性。
角色介绍
- 外观类:统一管理子系统,负责调用子系统的方法。
- 子系统类:实现子系统的功能,处理外观类指派的任务。
基本实现
子系统类
public interface Camera {
void open();
void takePicture();
void close();
}
public interface Phone {
void dail();
void hangup();
}
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("关闭摄像头");
}
}
public class PhoneImpl implements Phone {
@Override
public void dail() {
System.out.println("打电话");
}
@Override
public void hangup() {
System.out.println("电话挂断");
}
}
外观类
/**
* 假设移动电话有2大子系统:拨号系统和摄像头系统
* 根据不同功能自由组合
*/
public class MobilePhone {
private Phone mPhone = new PhoneImpl();
private Camera mCamera = new CameraImpl();
public void dail() {
mPhone.dail();
}
public void videoChat() {
mCamera.open();
mPhone.dail();
}
public void hangup() {
mPhone.hangup();
}
public void takePicture() {
mCamera.open();
mCamera.takePicture();
}
public void closeCamera() {
mCamera.close();
}
}
使用
public class Demo {
public static void main(String[] args) {
MobilePhone mobilePhone = new MobilePhone();
mobilePhone.takePicture();
mobilePhone.videoChat();
}
}
打开摄像头
拍照
打开摄像头
打电话