hereによってMauricio Linharesに興味をそそるアプローチを見ました。クロージャを通してオブジェクトに対するアクションが起こるアプローチのデザインパターン/用途
このDataObjectのに直接ロックを追加し、あなたが のように、このことを定義することができます。
public class DataObject { private Lock lock = new ReentrantLock(); public void lock() { this.lock.lock(); } public void unlock() { this.lock.unlock(); } public void doWithAction(DataObjectAction action) { this.lock(); try { action.doWithLock(this) : } finally { this.unlock(); } } // other methods here } public interface DataObjectAction { void doWithLock(DataObject object); }
をし、それを使用しているとき、あなたはこのようにそれを単に行うことができます:
DataObject object = // something here object.doWithAction(new DataObjectAction() { public void doWithLock(DataObject object) { object.setProperty("Setting the value inside a locked object"); } });
私はこのような解決策を考えていないでしょう。オブジェクトに対するアクションは、それ自身のインスタンス(this)を渡すクロージャによって処理されます。
これは特定のデザインパターンに従っていますか?
その他の一般的な用途はありますか?私はガードロックを思いつき、EDTを扱い、リソースがtry/finallyで閉じられるようにすることができます。
このようなアプローチの新しい用途はわかります。私はそれをツールボックスに追加することができます。
匿名のmehtodが外部変数を保持していないため、閉鎖が表示されない – sll
という用語をjava-idiomaticで使用しています。 http://en.wikipedia.org/wiki/Closure_%28computer_science%29#Anonymous_inner-classes_.28Java.29匿名のクラス、コールバック、またはその他のものを呼び出したい場合は、回答を提出してください。パターンとそこで使用される用語を定義します。私は別の使用法が指定された具象実装を使用できない、ローカル状態を持っている、またはクラスを含んでいる状態を変更することができない理由は見当たりません。このパターン/アプローチ(質問の目標)のより多くの例を持つことは、私たちの両方がそれをどのように適用できるかを理解するのに役立つかもしれません。 – Dan
私の答えに対する回答はありますか?コメント?投票?同意する? –