门面设计模式
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。
使用哪种设计模式属于详细设计。
门面模式就是动里不动外,让外层好调用。使用门面设计模式。
门面设计模式:网关聚合层;接口定义不动,只变化接口实现。
单例模式:线程池;
策略模式:支付接口;
外部系统------>门面对象------>子系统。通过门面对象才能访问子系统,就相当于网关层。
外部系统只能访问门面对象。侧重于易用性,子系统的复杂性不对外暴露。
门面(Facade)角色:子系统(subsystem)角色
通过门面对象来实现功能即可,创建一个门面类的对象,然后调用门面类的方法即可。在门面类的方法中,调用子系统的功能。
什么是门面模式?
门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
门面模式的门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。
门面模式的用意是为子系统提供一个集中化和简化的沟通管道,而不能向子系统加入新的行为。
在什么情况下使用门面模式
1)为一个复杂子系统提供一个简单接口;
2)提高子系统的独立性;
3)在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
门面类拥有子系统的引用,可以调用子系统的方法,暂不处理业务逻辑。
public class SecurityFacade {
private Camera camera1;
private Light light1;
public SecurityFacade() {
this.camera1 = new Camera();
this.light1 = new Light();
}
/**
* 开启
*/
public void Activate() {
camera1.TurnOn();
light1.TurnOn();
}
/**
* 关闭
*/
public void Deactivate() {
camera1.TurnOff();
light1.TurnOff();
}
public static void main(String[] args) {
SecurityFacade securityFacade = new SecurityFacade();
securityFacade.Activate();
securityFacade.Deactivate();
}
}