Java设计模式—外观模式

本片文章介绍另外一种相对比较简单的设计模式——外观模式(Facade)。GoF中这样描述外观模式:外观模式(Facade)为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。外观模式属于结构型模式,实现了子系统与客户之间的松耦合关系。

外观模式主要内容:

1、为复杂繁多的子系统接口提供一个一致的外观供客户使用;

2、对整个系统来说,外观模式不会再子系统提供的接口功能上增加任何额外的功能;

3、外观模式也不一定限制客户必须得使用提供的统一外观,客户也可以单独调用子系统的功能或行为;

使用场景:

涉及到与多个业务子对象交互的场景

示例代码:

模拟情况:大学开学迎新时迎新人员需要带上新生进行如下行为手续:学工办注册、后勤处办理寝室入住手续、餐饮处办理饭卡手续等,这三个子对象都遵循单一职责原则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Xuegongban {
public void onRegister(){
Log.d("学工办:", "报道注册");
}
}
public class Houqinchu {
public void onLiveIn(){
Log.d("后勤处:", "安排寝室和入住手续");
}
}
public class Canyinchu {
public void getRiceCard(){
Log.d("餐饮处:", "领取饭卡");
}
}

提供Facade外观对象:

1
2
3
4
5
6
7
8
9
10
11
public class Facade {
private Xuegongban xuegongban = new Xuegongban();
private Houqinchu houqinchu = new Houqinchu();
private Canyinchu canyinchu = new Canyinchu();
public void onShuttleNewStudent(){
xuegongban.onRegister();
houqinchu.onLiveIn();
canyinchu.getRiceCard();
}
}
运行结果:

外观模式优点:

1、实现了子系统与客户之间的松耦合关系,子系统的变化调整客户不受影响,只需要调整外观对象;

2、子系统与子系统、子系统与外观对象之间相互独立;

3、对客户端屏蔽子系统组件,减少了客户端需要处理的子对象的数目。

参考: