JAVA设计模式(系列) 门面模式(外观模式)

模式定义:为锡系统中的一组接口提供一个一致的接口,facade模式定义了一个高层接口,这个接口使得子系统更加容易
实现:

public class FacadeTest {
    public static void main(String[] args) {
        /**
         * Facade类其实相当于A、B、C模块的外观界面,有了这个Facade类,
         * 那么客户端就不需要亲自调用子系统中的A、B、C模块了,也不需要知道系统内部的实现细节,
         * 甚至都不需要知道A、B、C模块的存在,客户端只需要跟Facade类交互就好了,
         * 从而更好地实现了客户端和子系统中A、B、C模块的解耦,
         * 让客户端更容易地使用系统。
         */
        Facade facade = new Facade();
        facade.test();
    }
}
/**
 * 门面角色类:
 */
class Facade {
    //示意方法,满足客户端需要的功能
    public void test(){
        ModuleA a = new ModuleA();
        a.testA();
        ModuleB b = new ModuleB();
        b.testB();
        ModuleC c = new ModuleC();
        c.testC();
    }
}
/**
 * 子系统角色中的类:A B C
 */
class ModuleA {
    //示意方法
    public void testA(){
        System.out.println("调用ModuleA中的testA方法");
    }
}
class ModuleB {
    //示意方法
    public void testB(){
        System.out.println("调用ModuleB中的testB方法");
    }
}
class ModuleC {
    //示意方法
    public void testC(){
        System.out.println("调用ModuleC中的testC方法");
    }
}

门面模式的优点

  • 松散耦合: 门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。

  • 简单易用: 门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。

  • 更好的划分访问层次: 通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。

例如在tomcat下的:

  • org.apache.catalina.connector.RequestFacade
  • org.apache.catalina.connector.ResponseFacade
发布了55 篇原创文章 · 获赞 3 · 访问量 5219

猜你喜欢

转载自blog.csdn.net/qq_38130094/article/details/104076072