または、テンプレート パターンを使用して接続配管を抽出し、コピー/貼り付けを回避できます。基本的な考え方は次のようなものです。
abstract ConnectionTemplate {
private Connection connection = // ...
/**
* Method to be implementad by child classes
*/
public abstract void businessLogicCallback();
/**
* Template method that ensure that mandatory plumbing is executed
*/
public void doBusinessLogic() {
try {
openConnection();
// fetch single result, iterate across resultset, etc
businessLogicCallback();
finally {
closeConnection();
}
}
void openConnection() {
connection.open();
}
void closeConnection() {
if (connection != null) {
connection.close();
}
}
}
これで、クラスの実装は次のように簡単になります。
class ImportantBusinessClass extends ConnectionTemplate {
@Override
public void businessLogicCallback() {
// do something important
}
}
そして、あなたはそれを次のように使用します
ImportantBusinessClass importantClass = new ImportantBusinessClass();
importantClass.doBusinessLogic(); // opens connection, execute callback and closes connection
Spring フレームワークは、いくつかの場所でこの手法を使用します。特に、JdbcTemplateは、SQL、接続、行とドメイン オブジェクト間のマッピングなどを処理します。実装の詳細については、GitHubのソース コードを参照してください。