Connect.javaДобавить информацию интерфейс
public interface Connect {
void commit();
void close();
void setTransactional();
void executeCommand();
}
MainApp.java
public class MainApp {
public static void main(String[] args) {
Connect conn=MainApp.getTransactionalConnection();
conn.executeCommand();
conn.executeCommand();
conn.executeCommand();
conn.executeCommand();
closeConnection(conn);
}
public static Connect getNormalConnection(){
return DriverManager.getConnection(); //returns class i have no access to , dont even know its name
}
public static Connect getTransactionalConnection(){
Connect conn = getNormalConnection();
conn.setTransactional();
return conn;
}
private static void closeConnection(Connect conn) {
//something like if connection is transactional then conn.commit();
conn.close();
}
}
я получил как 100 функций, которые выглядят как основной(). Проблема в том, что я не хочу менять код этих 100 функций и изменять только 1 строку getNormalConnection для getTransactionalConnection. У меня нет доступа и не знаю имен классов, реализующих интерфейс Connect. Я хочу только добавить commit для closeConnection(), создал ли я транзакционное соединение или нет.
Но что, когда Connect содержит 60 методов? Каждый из них мы должны «обернуть». Другим возможным решением было бы сделать внешнюю карту и сохранить ссылки с булевым isTransactional. Это очень легко реализовать, но для этого просто ситуация не рекомендуется? – MistyK
@Zbigniew: В этот момент это другой вопрос - и я был бы глубоко подозрите к такому интерфейсу в целом. Обтекание довольно легко, хотя достойные IDE могут генерировать для вас весь этот код, а затем вам просто нужно решить, какие методы вы хотите обрабатывать по-разному. –
http://pastebin.com/MfMvMAmT Что вы думаете об этом в C++? Я знаю, что это турбо-уродливое;] Он работает, но я думаю, что fancyPointer иногда может быть случайным числом, может быть, даже «5», поэтому он будет терпеть неудачу. – repo