标签:new 一个 设计 其他 平台 sub 通信 代码 限制
在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。
软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则(最少知道原则)”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。
外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式。
属于 对象结构型模式。
它是 迪米特法则 的典型应用。
外观(Facade)模式包含以下主要角色:
# 子系统角色 * 3
public class SubSystem01 {
public void f01() {
System.out.println("SubSystem01 f01");
}
}
public class SubSystem02 {
public void f02() {
System.out.println("SubSystem02 f02");
}
}
public class SubSystem03 {
public void f03() {
System.out.println("SubSystem03 f03");
}
}
# 外观角色
public class Facade {
private SubSystem01 system01 = new SubSystem01();
private SubSystem02 system02 = new SubSystem02();
private SubSystem03 system03 = new SubSystem03();
public void f() {
system01.f01();
system02.f02();
system03.f03();
}
}
# 客户角色
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.f();
}
}
分析
根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。 -外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。 - 外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。 -外观模式的目的在于降低系统的复杂程度。 -外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。
优点
缺点
不要试图通过外观类在子系统中增加新的行为,在外观模式中,当增加或移除子系统时需要修改外观类,这违背了“开闭原则”。如果引入抽象外观类,则在一定程度上解决了该问题。
标签:new 一个 设计 其他 平台 sub 通信 代码 限制
原文地址:https://www.cnblogs.com/wuqinglong/p/12397379.html