定义
- 也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
- 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端
- 只需跟这个接口发生调用,而无需关心这个子系统的内部细节
- 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。要以让系统有层次,利于维护为目的。
角色
>门面角色(facade):这是外观模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
>子系统角色(SystemA、SystemB、SystemC):实现了子系统的功能。对子系统角色来说,facade角色与客户角色一样,是未知的,它没有任何facade角色的信息和链接。
>客户角色(client):调用facade角色来完成要得到的功能。
代码实现
- 用喝茶来举例子,你想喝茶,需要烧水-》茶具->茶叶,外观模式就是想你去茶馆喝茶,直接跟店小二说明你的诉求,店小二就去做烧水-》茶具->茶叶
public class test7 {
public static void main(String[] args) {
Waiter waiter = new Waiter();
waiter.getTea("龙井");
}
}
//获得水
class DrinkableWater {
private String name;
public DrinkableWater(String name) {
// System.out.println(name + "水准备好了");
this.name = name;
}
public void facadeWater() {
System.out.println(name + "水开了");
}
}
//获得茶叶
class Tea {
private String name;
public Tea(String name) {
// System.out.println(name + "茶叶准备好了");
this.name = name;
}
public void facadeWater() {
System.out.println(name + "茶叶可以使用了");
}
}
//泡茶
class TeaCup {
private String name;
public TeaCup(String name) {
// System.out.println(name + "茶具准备好了");
this.name = name;
}
public void facadeWater() {
System.out.println(name + "可以喝茶叶了");
}
}
//店小二泡茶
class Waiter {
public void getTea(String name) {
DrinkableWater drinkableWater = new DrinkableWater(name);
TeaCup teaCup = new TeaCup(name);
Tea tea = new Tea(name);
drinkableWater.facadeWater();
tea.facadeWater();
teaCup.facadeWater();
}
}