JAVA设计模式——外观模式
2018-01-22 09:34
281 查看
外观模式(又称为门面模式)是一种结构型设计模式。外观模式的思想是:为子系统的各个模块提供一个统一的门面,由门面负责对客户提供服务。
外观模式涉及2个角色:
门面(Facade):负责为客户提供服务,将所有从客户端发来的请求委派到相应的子系统去。
子系统(Subsystem):子系统中包含多个模块。可包含一个或多个子系统。每个子系统都可以被客户端直接调用,或者被门面角色调用,子系统并不知道门面的存在。
当一次的功能访问同时调用到多个对象时,可以使用外观模式。例如,在分布式应用中,通过远程调用服务,使用外观模式可以降低应用程序与服务的交互次数,同时可以降低应用程序的复杂性。
代码实现如下:
子系统:
门面:
客户:
运行结果:
Module A
Module B
Module C
结构图:
当想选择性地暴露子系统模块的方法时,可以使用外观模式。
代码实现如下:
子系统:
门面:
客户:
运行结果:
Module A 1
Module B 1
Module C 1
结构图:
外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
外观模式涉及2个角色:
门面(Facade):负责为客户提供服务,将所有从客户端发来的请求委派到相应的子系统去。
子系统(Subsystem):子系统中包含多个模块。可包含一个或多个子系统。每个子系统都可以被客户端直接调用,或者被门面角色调用,子系统并不知道门面的存在。
当一次的功能访问同时调用到多个对象时,可以使用外观模式。例如,在分布式应用中,通过远程调用服务,使用外观模式可以降低应用程序与服务的交互次数,同时可以降低应用程序的复杂性。
代码实现如下:
子系统:
public class ModuleA{ public void method(){ System.out.println("Module A"); } } public class ModuleB{ public void method(){ System.out.println("Module B"); } } public class ModuleC{ public void method(){ System.out.println("Module C"); } }
门面:
public class Facade { private ModuleA a = new ModuleA(); private ModuleB b = new ModuleB(); private ModuleC c = new ModuleC(); public void method() { a.method(); b.method(); c.method(); } }
客户:
public class Client { private Facade facade = new Facade(); public void method() { facade.method(); } } // 测试 class FacadeTest { public static void main(String[] args) { Client client = new Client(); client.method(); } }
运行结果:
Module A
Module B
Module C
结构图:
当想选择性地暴露子系统模块的方法时,可以使用外观模式。
代码实现如下:
子系统:
public class ModuleA{ public void method1(){ System.out.println("Module A 1"); } public void method2(){ // 不想暴露这个方法给客户 System.out.println("Module A 2"); } } public class ModuleB{ public void method1(){ System.out.println("Module B 1"); } public void method2(){ // 不想暴露这个方法给客户 System.out.println("Module B 2"); } } public class ModuleC{ public void method1(){ System.out.println("Module C 1"); } public void method2(){ // 不想暴露这个方法给客户 System.out.println("Module C 2"); } }
门面:
public class Facade { private ModuleA a = new ModuleA(); private ModuleB b = new ModuleB(); private ModuleC c = new ModuleC(); public void methodA() { a.method1(); } public void methodB() { b.method1(); } public void methodC() { c.method1(); } }
客户:
public class Client { private Facade facade = new Facade(); public void method() { facade.methodA(); facade.methodB(); facade.methodC(); } } // 测试 class FacadeTest { public static void main(String[] args) { Client client = new Client(); client.method(); } }
运行结果:
Module A 1
Module B 1
Module C 1
结构图:
外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。
通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。
相关文章推荐
- java设计模式--外观模式
- (2)JAVA设计模式十九--Facade(外观模式)
- java设计模式---外观模式(facade pattern)
- 菜鸟版JAVA设计模式—外观模式
- java设计模式9——外观模式(facade)
- Java 设计模式_外观模式
- Java设计模式10——外观模式
- JAVA 设计模式 外观模式
- JAVA--外观模式(Facade)--设计模式九
- java设计模式之外观模式
- java设计模式之外观设计模式
- JAVA开发的23种设计模式之 --- 外观模式
- java设计模式之外观模式(门面模式)
- Java设计模式之从"我想请个秘书!"分析外观(Facade)模式
- Java设计模式(八) 外观模式详解
- java设计模式-外观模式(门面模式)
- java设计模式--外观模式
- java设计模式之外观模式(门面模式)
- Java设计模式_结构型_外观模式_病人去医院看病
- java设计模式_外观模式