前言:
外观模式,也叫Facade模式,当外部客户端与子系统通信时,通过外观对象进行通信。外观对象提供了调用子系统的各种接口。一般可以把外观对象设置成单例的。
优点:
降低调用者与子系统的耦合,隐藏了子系统的实现细节,同时更利于维护
怎么实现:
Facede外观对象:对子系统进行封装调用
子系统对象:可能存在多个
调用者:客户端调用者
代码:
子系统A:
package com.xhx.designpattern;
/**
* xuhaixing
* 2018/6/30 11:32
**/
public class ModuleA {
public void aMethod(){
System.out.println("我是A系统方法");
}
}
子系统B:
package com.xhx.designpattern;
/**
* xuhaixing
* 2018/6/30 11:32
**/
public class ModuleB {
public void bMethod(){
System.out.println("我是B系统方法");
}
}
子系统C:
package com.xhx.designpattern;
/**
* xuhaixing
* 2018/6/30 11:32
**/
public class ModuleC {
public void cMethod(){
System.out.println("我是C系统方法");
}
}
外观对象:里面封装了各种组合调用子系统的方法
package com.xhx.designpattern;
/**
* xuhaixing
* 2018/6/30 11:33
*
* 外观对象,提供过了对子系统的封装,
* 外部客户端通过调用外观对象对内部系统进行访问。避免子系统内部实现细节
**/
public class Facade {
private ModuleA moduleA;
private ModuleB moduleB;
private ModuleC moduleC;
public Facade(){
moduleA = new ModuleA();
moduleB = new ModuleB();
moduleC = new ModuleC();
}
public void doABC(){
moduleA.aMethod();
moduleB.bMethod();
moduleC.cMethod();
}
public void doAB(){
moduleA.aMethod();
moduleB.bMethod();
}
public void doAC(){
moduleA.aMethod();
moduleC.cMethod();
}
}
客户端调用者:
package com.xhx.designpattern;
/**
* xuhaixing
* 2018/6/30 11:23
**/
public class App {
public static void main(String[] args) {
Facade facade= new Facade();
facade.doAB();
}
}