结构型 - 外观模式

目录
设计思想
外观模式(Facade)是一种结构型模式,其目的是为了提供一个简化的接口,隐藏系统的复杂性,使得客户端能够更容易地使用系统。
外观模式的关键思想是提供一个简化的接口,封装一组复杂的子系统,以便客户端能够更容易地使用系统。 通过引入外观,客户端无需直接与多个子系统的复杂接口交互,而是只需与外观对象交互,从而降低了系统的耦合度。
类图
代码实现
class SubSystemClassA {
void operation() {
System.out.println("SubSystemClassA operation invoke.");
}
}
class SubSystemClassB {
void operation() {
System.out.println("SubSystemClassB operation invoke.");
}
}
class SubSystemClassC {
void operation() {
System.out.println("SubSystemClassC operation invoke.");
}
}
class Facade {
private SubSystemClassA subSystemA = new SubSystemClassA();
private SubSystemClassB subSystemB = new SubSystemClassB();
void subSystemOperation() {
System.out.println("Facade subSystemOperation invoke.");
subSystemA.operation();
subSystemB.operation();
}
}
class AdditionalFacade() {
private SubSystemClassB subSystemB = new SubSystemClassB();
private SubSystemClassC subSystemC = new SubSystemClassC();
void anotherOperation() {
System.out.println("AdditionalFacade anotherOperation invoke.");
subSystemB.operation();
subSystemC.operation();
}
}
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.subSystemOperation();
}
}
优缺点
优点:
- 实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端。
- 简化了客户端对子系统的使用难度,客户端(用户)无须关心子系统的具体实现方式,而只需要和外观进行交互即可。
- 为不同的用户提供了统一的调用接口,方便了系统的管理和维护。
缺点:
- 外观可能成为与程序中所有类都耦合的上帝对象。
- 不符合开闭原则;如果系统发生变化,可能需要修改外观类,违背了开闭原则(对扩展开放,对修改关闭)。
适用场景
- 外观模式适用于系统较为庞大、复杂,有多个子系统的情况,通过引入外观类简化客户端的调用。
- 当系统需要隔离客户端与子系统之间的直接联系时,外观模式可以帮助降低耦合度。可以提高子系统的独立性和可移植性;
- 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。