zoukankan      html  css  js  c++  java
  • 设计模式之外观模式(结构型)

    一、模式定义

    外观模式:外观模式就是提供一个统一的接口,用来访问子系统的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。,外观模式也称门面模式,是一种对象结构型设计模式。

    在这里插入图片描述

    二、模式角色

    从模式定义可以知道,外观模式应该包含如下角色:

    • Frcade:外观角色
    • SubSystem:子系统角色
    • Client:客户端角色

    经典例子:

    public class Facade
    {
        private SubSystemA obj1 = new SubSystemA();
        private SubSystemB obj2 = new SubSystemB();
        private SubSystemC obj3 = new SubSystemC();
        public void method()
        {
            obj1.method();
            obj2.method();
            obj3.method();
        }
    } 
    
    

    三、模式简单分析

    外观模式为客户端类提供了便捷,客户端类不需要关注子系统的设计,直接提供外观类访问就好

    外观模式符合“迪米特法则”,引入一个单一简单的接口,给客户端调用,从而降低了客户端和子系统的耦合度

    不过外观模式也有一些缺点,每一种设计模式都是有缺点和优点的,需要根据复杂的业务场景进行选用。假如没引用一个抽象的外观类的话,一旦业务改变就需要进行外观类和客户端类代码的调整了

    在这里插入图片描述

    对于一些很复杂的业务系统来说,有时候可以设计多个外观类进行系统解耦

    四、简单例子实践

    JDBC数据库操作的例子,本例子来自《设计模式》一书

    import java.sql.*;
    
    public class JDBCFacade {
        
        private Connection conn=null;
        private Statement statement=null;
    
        public void open(String driver,String jdbcUrl,String userName,String userPwd) {
            try {
                Class.forName(driver).newInstance();
                conn = DriverManager.getConnection(jdbcUrl,userName,userPwd);
                statement = conn.createStatement();
            } 
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public int executeUpdate(String sql) {
            try {
                return statement.executeUpdate(sql);
            } 
            catch (SQLException e) {
                e.printStackTrace();
                return -1;
            }
        }
    
        public ResultSet executeQuery(String sql) {
            try {
                return statement.executeQuery(sql);
            } catch (SQLException e) {
                e.printStackTrace();
                return null;
            }
        }
    
        public void close() {
            try {
                conn.close();
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    五、模式应用

    外观模式适用于复杂的系统,可以用于系统解耦。下面简单列举一下外观模式的一些应用场景

    • JavaEE框架里的Session就是用了外观模式

    • 学JSP的JDBC数据库操作也是经常用外观模式的

  • 相关阅读:
    P1456 Monkey King
    P3377 【模板】左偏树(可并堆)
    P1074 靶形数独
    P1120 小木棍
    P5490 【模板】扫描线
    糖糖别胡说,我真的不是签到题目
    最长公共子序列
    最长上升子序列
    数的三次方根
    地、颜色、魔法(dfs)
  • 原文地址:https://www.cnblogs.com/mzq123/p/10426290.html
Copyright © 2011-2022 走看看