Язык программирования Java Дмитриев Андрей Владиславович Май 2007
Фасад (Facade) С развитием программы растет количество классов и среди них можно выделить подсистемы. Фасад предназначен для упрощения интерфейса к таким подсистемам. Паттерн предназначен для объединения нескольких сложных классов в один.
Фасад (подсистема)
Фасад (загрузка драйвера) try{ //загрузка драйвера Class.forName(driver); } catch (Exception e) { System.out.println(e.getMessage()); }
Фасад (соединение) try { con = DriverManager.getConnection(url); //получение метаинформации dma = con.getMetaData(); }catch (Exception e) { System.out.println(e.getMessage()); }
Чтение структуры БД public String[] getTableNames() { String[] tbnames = null; Vector tname = new Vector(); try { results = new Results(dma.getTables(catalog, null, "%", types)); } catch (Exception e) { System.out.println(e); }
Чтение структуры БД (cont.) while (results.hasMoreElements()) tname.addElement(results.getColumnValue ("TABLE_NAME")); tbnames = new String[tname.size()]; for (int i=0; i< tname.size(); i++) tbnames[i] = (String)tname.elementAt(i); return tbnames; }
Фасад (класс БД) class Database { public Database(String driver){} public void open(String url, String cat); public String[] getTableNames(); public String[] getColumnNames(String table); public String getColumnValue(String table, String columnName); public String getNextValue(String columnName); public ResultSet Execute(String sql); }
Фасад (класс Результат) class Results { public Results(ResultSet rset); public String[] getMetaData(); public boolean hasMoreElements(); public String[]nextElement(); public String getColumnValue(String columnName); public String getColumnValue(int i); }
Фасад (использование) db = new Database("sun.jdbc.odbc.JdbcOdbcDriver"); db.open("jdbc:odbc:Grocery prices", null); String tnames[]=db.getTableNames(); Последовательность вызовов методов связанных классов и взаимодействие между ними сводится к одному вызову. Правила взаимодействия теперь стали частью реализации нового класса.
Фасад (содержимое классов) Класс Database будет содержать в себе Connection, DatabaseMetaData, Results. Класс Results будет содержать в себе ResultSet и ResultSetMetaData.
Фасад (выводы) Естественный способ упрощения работы с частями системы. Как правило повышает уровень абстракции представления классов.