Guest User

Untitled

a guest
Apr 24th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. package com.test;
  2.  
  3. public class Main {
  4.  
  5. public static void main(String[] args) {
  6. DatabaseService databaseService = new DatabaseService();
  7. MongoDB mongoDB = new MongoDB();
  8. OracleDB oracleDB = new OracleDB();
  9.  
  10. // Both can commit
  11. databaseService.commit(oracleDB);
  12. databaseService.commit(mongoDB);
  13.  
  14. // Only Oracle can commit, Mongo will not pass
  15. databaseService.makeTransaction(oracleDB);
  16. databaseService.makeTransaction(mongoDB); // Compiler error because of incompatible types
  17. }
  18. }
  19.  
  20. interface Database {
  21.  
  22. void commit();
  23. }
  24.  
  25. interface TransactionalDatabase extends Database {
  26.  
  27. void openTransaction();
  28. }
  29.  
  30. class DatabaseService {
  31.  
  32. public void commit(Database database) {
  33. database.commit();
  34. }
  35.  
  36. public void makeTransaction(TransactionalDatabase database) {
  37. database.openTransaction();
  38. database.commit();
  39. }
  40. }
  41.  
  42. class OracleDB implements TransactionalDatabase {
  43.  
  44. @Override
  45. public void commit() {
  46. System.out.println("OracleDB commit");
  47. }
  48.  
  49. @Override
  50. public void openTransaction() {
  51. System.out.println("OracleDB opens transaction");
  52. }
  53. }
  54.  
  55. class MongoDB implements Database {
  56.  
  57. // No transactions at all
  58.  
  59. @Override
  60. public void commit() {
  61. System.out.println("Mongo commit");
  62. }
  63. }
Add Comment
Please, Sign In to add comment