Паттерн: Мост (Bridge)
Исходник: Client.java, язык: java [code #451, hits: 9113]
автор: this [добавлен: 07.07.2007]
  1. package bridge;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7.  
  8. public class Client {
  9.  
  10. /**
  11. * @param args
  12. */
  13. public static void main(String[] args) {
  14.  
  15. // Client Update Command
  16. CommandImpl clientUpdateImpl = PrepareClientModification("Vasily Pupkin");
  17. UpdateCommand clientUpdate = new UpdateCommand(clientUpdateImpl);
  18. if (!clientUpdate.Execute()) {
  19. System.out.println(clientUpdate.getErrors());
  20. }
  21.  
  22. // Balance correction
  23. CommandImpl balanceCorrectImpl = PrepareBalanceCorrection();
  24. UpdateCommand balanceCommand = new UpdateCommand(balanceCorrectImpl);
  25. if (!balanceCommand.Execute()) {
  26. System.out.println(balanceCommand.getErrors());
  27. }
  28.  
  29.  
  30. }
  31.  
  32. public static CommandImpl PrepareClientModification(String newFIO) {
  33. Statement stmt = null;
  34. try {
  35. Class.forName("oracle.jdbc.driver.OracleDriver");
  36.  
  37. Connection conn = DriverManager.getConnection(
  38. "jdbc:oracle:thin:@localhost:1521:XE", "user", "pass");
  39. stmt = conn.createStatement();
  40. } catch (ClassNotFoundException e) {
  41. e.printStackTrace();
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. }
  45.  
  46. CommandImpl ClientQuery = new SQLUpdateCommand(stmt,
  47. "UPDATE `users` SET `fio` = " + newFIO);
  48.  
  49. return ClientQuery;
  50. }
  51.  
  52. public static CommandImpl PrepareBalanceCorrection() {
  53. return new UpdateFileCommand("balance.txt", "$ 100,000");
  54. }
  55. }
Реализация паттерна мост в действии.

Запуск реализованных команд. Редактирование, добавление данных.
Конкретные реализации при этом прозрачно выполняют действия либо в рамках базы данных, либо просто в файловой системе.

Обратите на код в методе main – это то, что и достигается применением данного паттерна: независимый, единый код запуска любых видов команд в любом контексте, который не нужно будет менять и перекомпилировать при каких-либо изменениях в деталях реализации тех или иных операций, алгоритмов выполнения команд и т.д.

Тестировалось на: java 1.5.0_04

+добавить реализацию