ほとんどの無線デバイスでは、このタイプと互換性のある復調モードを使用して、探索して聴いてみたい電波を設定できます。どのデザインパターンを使用するかを理解していますか?
AMとFMの少なくとも2つのタイプがあります。この場合の無線デバイスは、次のようにモデル化できます。
この場合、どのように戦略パターンを適用できますか?
ほとんどの無線デバイスでは、このタイプと互換性のある復調モードを使用して、探索して聴いてみたい電波を設定できます。どのデザインパターンを使用するかを理解していますか?
AMとFMの少なくとも2つのタイプがあります。この場合の無線デバイスは、次のようにモデル化できます。
この場合、どのように戦略パターンを適用できますか?
なぜ多型を使用しないのですか?
インタフェース行います
interface Radio {
void modulate();
}
そして2クラス実装より:あなたが持つことができる場合は
Radio myRadio = new FMRadio();
myRadio.demodule();
:
FMRadio implements Radio{
public void demodule(){
//FM modulation
}
}
AMRadio implements Radio{
public void demodule(){
//AM modulation
}
}
よりも、自分のメインに、あなたが行くことができるのAMとFMの両方の復調の契約をカバーするインターフェイスであれば、戦略パターンを使用することができます:
Demodulator d; // interface Demodulator { byte[] demodulate(); }
switch(m) {
case "AM":
d = new AMDemodulator();
break;
case "FM"
d = new FMDemodulator();
break;
default:
throw new IllegalArgumentException("Unsupported type '"+ m + "'"); // you could use an Enum instead of a String
}
d.demodulate(waves);
これは共通のプログラムロジック(無重複)の残りの部分を維持しながら、あなたはその場でDemodulator
一部を切り替えることができます。
チェックデザインパターンと例については、このレポ(ない鉱山):&カプセル化をラップしますhttps://github.com/iluwatar/java-design-patterns
私は@Ladislav_Mの前の回答にContext
クラスを使用して追加することになり、その適切な戦略パターンにするために、特定の戦略を実行し、コードに柔軟性を与える:main
での実行がより便利になる
class Context {
private Radio radio;
public Context(Radio radio) {
this.radio = radio;
}
public Object runStrategy() {
radio.demodulate();
// do any other stuff you want
return ...
}
}
:
Context context = new Context(new FmRadio());
Object result = context.runStrategy();
それとも、上記をインライン化することができます
もちろんObject result = (new Context(new FmRadio())).runStrategy();
、あなたがswitch
ブロック内Radio
の実装を選択し、ちょうどContext
のコンストラクタに変数として渡すことができます。
これはです。ストラテジーデザインパターンの単純な継承の場合には適していません。ストラテジが使用されますオブジェクトの状態は変更されませんが、異なるアルゴリズムが異なる時刻に適用されます。例えば従業員の様々な役割(例えば、一時的、恒久的なものなど)に対する支払パッケージ計算。ここでの重要なポイントは、一時的な従業員はいつか恒久的になることができることです。
上記の場合、AMはその生涯ではになることはありません。したがって、戦略は正しい戦略ではありません。これらは共通の振る舞いを持つ(おそらく)異なるクラス(存在する場合)を基本クラスに移すことができます。彼らがクライアントと共通の契約を示していれば、インターフェースでさえその仕事をするでしょう。
ようこそstackoverflowへ!この質問をご覧ください:https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions – Fuhrmanator