Que piensan de este Adaptador creado que inyecta dependencias, es una simulación de herencia múltiple en Java.
interface DBConnection:
interface DBConnection:
package structurals.adapter; public interface DBConnection { void connect(); }
interface INoSQLConnection extends DBConnection:
package structurals.adapter; public interface INoSQLConnection extends DBConnection{ String executeSentence(); }
interface ISQLConnection extends DBConnection
package structurals.adapter; public interface ISQLConnection extends DBConnection{ String runQuery(); }
class DBAdapterDI
package structurals.adapter; //Adapter works like a bridge between client and interfaces public class DBAdapterDI implements INoSQLConnection, ISQLConnection { private INoSQLConnection noSQL; private ISQLConnection sql; public DBAdapterDI(INoSQLConnection noSQL){ this.noSQL = noSQL; } public DBAdapterDI(ISQLConnection sql){ this.sql = sql; } public void connect() { if(this.noSQL != null){ this.noSQL.connect(); }else{ this.sql.connect(); } } public String runQuery() { String answer = ""; if(this.sql == null){ throw new IllegalArgumentException("¡There is no persistent SQL connection, you can't run query!"); } return this.sql.runQuery(); } public String executeSentence() { String answer = ""; if(this.noSQL == null){ throw new IllegalArgumentException("¡There is no persistent NoSQL connection, you can't execute statement!"); } return this.noSQL.executeSentence(); } }
Main:
package structurals.adapter; public class Main { //ISQLConnection and NoSQLConnection have common methods connect() but interfaces have uncommon methods: runQuery() and executeSentence() //We need to create an Adapter to solve this situation. public static void main (String args[]){ //Detailed DBAdapterDI dbConnection1= new DBAdapterDI(new MySQLConnection()); dbConnection1.connect(); String result3 = dbConnection1.runQuery(); System.out.println(result1); DBAdapterDI dbConnection2= new DBAdapterDI(new MongoDBConnection()); dbConnection2.connect(); String result4 = dbConnection2.executeSentence(); System.out.println(result2); } }