リソースのリストを入力として受け取り、それぞれをロックしようとするコードに取り組んでいます。誰かが失敗すると、すべてのリソースのロックを解放しようとします。これは、「すべて」のリソースがロックされているか、まったくロックされていないことを意味します。私には2つのアプローチがありますが、他の方法よりも大きなメリットはありません。そのような場合の標準的なコーディング方法は何ですか? デザインパターンに名前はありますか?
OPTION 1:
// one function taking on 2 responsibilities. appears bad to have unlock code in locking function
public boolean getLock(List<Resource> resources) {
for (Resource r : resources) {
if (! Lock.getLock(r)) {
releaseLocks(resources);
return false;
}
}
return true;
}
OPTION 2:
public boolean getLock(List<Resource> resources) {
for (Resource r : resources) {
if (! Lock.getLock(r)) {
return false;
}
}
return true;
}
public boolean stateChecker(List<Resource> resources) {
if (!getLock(resouces)) {
releaseLocks(resources);
return false;
}
return true;
}