3

セマフォを使用して接続 (または何か) を制限しない方法を考えています。

だから、「それはばかげている」と思うかもしれません。ただし、制限されたケースと無制限のケースを均一に処理できるため、コードが少し簡素化されます。

次のようなものを書く方法についてのアドバイスを探しているわけではないことに注意してください

if(limited) {
    semaphore.acquire();
}

この分岐を if 文で行う方法は、何十通りも思いつくことができます。

具体的には、Apache Commons または Java ソリューションを探しています。これは、解決するために独自の単純なクラスを作成できる単純な状況ですが、広く利用可能なユーティリティ ソリューションがある場合は、それらを使用することを好みます。

4

1 に答える 1

1

Semaphore がインターフェイスではなくクラスであることを考えると、ロジック内で何らかの形で分岐する必要があります。コード全体に「if (フラグ)」チェックを散りばめないようにするために、Semaphore クラスの取得および解放セマンティクスを含むアプリケーションで使用するインターフェイスを作成できます。その時点から、2 つの実装を提供します。1 つは基本的にノーオペレーションであり、保護をまったく提供しません。もう 1 つは、java.util.concurrent.Semaphore に委譲するクラスです。この時点から、依存性注入を使用して決定することができます。どの実装を使用するか。

繰り返しになりますが、分岐は必然的にどこかに存在する必要があります。これは、分岐をビジネス ロジックの外に移動するだけです。

于 2013-03-01T01:21:32.973 に答える