if else文をパターンに置き換える
2023-09-01 17:18:54
質問
近い将来、大きくなるかもしれないif else文があります。
public void decide(String someCondition){
if(someCondition.equals("conditionOne")){
//
someMethod("someParameter");
}else if(someCondition.equals("conditionTwo")){
//
someMethod("anotherParameter");
}
.
.
else{
someMethod("elseParameter");
}
}
このように、すでにごちゃごちゃしているので、何かデザインパターンを適用した方が良いのではないかと思います。私はStrategyパターンを調べましたが、私はそれがここでif else条件を減らすことができるかどうかわからない。何か提案はありますか?
どのように解決するのですか?
これは古典的な コンディション・ディスパッチャをコマンドに置き換える であり、リファクタリング to パターンの本で紹介されています。
基本的には
Command
オブジェクトを作成し、それらのコマンドの Map を作成して、キーが条件の文字列となります。
interface Handler{
void handle( myObject o);
}
Map<String, Handler> commandMap = new HashMap<>();
//feel free to factor these out to their own class or
//if using Java 8 use the new Lambda syntax
commandMap.put("conditionOne", new Handler(){
void handle(MyObject o){
//get desired parameters from MyObject and do stuff
}
});
...
そして、あなたのif/elseコードの代わりに、それは代わりになります。
commandMap.get(someCondition).handle(this);
これで、後で新しいコマンドを追加する必要がある場合、ハッシュに追加するだけです。
デフォルトのケースを処理したい場合は
Null Object
パターンを使って、ある条件がMapにない場合を処理することができます。
Handler defaultHandler = ...
if(commandMap.containsKey(someCondition)){
commandMap.get(someCondition).handle(this);
}else{
defaultHandler.handle(this);
}
関連
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
代入の左辺は変数でなければならない 解答
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み】C++ シングルトンデザインパターン
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
セミコロン期待値エラー解決
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
FindBugの使用概要
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Java基礎編 - オブジェクト指向
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
org.xml.sax.SAXParseExceptionのエラー解決方法