写过JDBC就能看懂外观模式

什么是外观模式?

外观模式简单理解就是秘书,大管家。官方一点的定义是:外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性

实际外观模式很多人在用,但是缺不知道它叫外观模式。比如初学者学习JDBC时,获取数据库连接对象的步骤通常是定义url,driver,username,password,加载启动类,获取数据源连接对对象。对于客户端来说,它的目的就是获取一个数据库连接对象,因为这个连接对象依赖到了启动类,而启动类获取连接对象又依赖于url,username,password。此时大家就会想到,我们学习JDBC时会写一个工具类,这个类暴露了一个获取数据源连接的方法,这就是外观模式的思想。简单的demo如下:

public static Connection connectionTest() {
    final String DRIVER = "com.mysql.jdbc.Driver";
    final String URL = "jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8";
    final String USERNAME = "root";
    final String PASSWORD = "123456";

    try {
        Class.forName(DRIVER);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    Connection connection = null;
    try {
        connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return connection;
}

很多人会发现我们实际写工具类时并不是这么写的,这里这么写是因为JDBC获取连接对象的步骤大家都是清楚的,所以拿这个来举例会更好理解外观模式的思想。如果没有外观模式,那么每个需要获取Connection的地方都需要写上方法体中的内容。

总结

外观模式的核心思想是将多个复杂的调用API操作抽取出来,对外提供一个完备的方法,隐藏内部实现细节,非常符合面向对象思想中的封装思想。它最大的缺点是随着业务的扩展及相关API的改动,外观模式会显的非常臃肿,难以维护,并且与相关API都是紧耦合的关系。

你可能感兴趣的:(Java成神之路之设计模式,外观模式,java,设计模式)