Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.test;
- public class Main {
- public static void main(String[] args) {
- DatabaseService databaseService = new DatabaseService();
- MongoDB mongoDB = new MongoDB();
- OracleDB oracleDB = new OracleDB();
- // Both can commit
- databaseService.commit(oracleDB);
- databaseService.commit(mongoDB);
- // Only Oracle can commit, Mongo will not pass
- databaseService.makeTransaction(oracleDB);
- databaseService.makeTransaction(mongoDB); // Compiler error because of incompatible types
- }
- }
- interface Database {
- void commit();
- }
- interface TransactionalDatabase extends Database {
- void openTransaction();
- }
- class DatabaseService {
- public void commit(Database database) {
- database.commit();
- }
- public void makeTransaction(TransactionalDatabase database) {
- database.openTransaction();
- database.commit();
- }
- }
- class OracleDB implements TransactionalDatabase {
- @Override
- public void commit() {
- System.out.println("OracleDB commit");
- }
- @Override
- public void openTransaction() {
- System.out.println("OracleDB opens transaction");
- }
- }
- class MongoDB implements Database {
- // No transactions at all
- @Override
- public void commit() {
- System.out.println("Mongo commit");
- }
- }
Add Comment
Please, Sign In to add comment