在大多数无线电设备中,我们可以使用与此类型兼容的解调模式来配置要探索和收听电台的波。
至少有两种类型的AM和FM。在这种情况下,我们可以为无线电设备建模,如下所示:
class RadioDevice {
void demodulate (String m) {
if(m.equals("FM")
/* FM modelation */
else if(m.equals("AM")
/* AM modelation */
}
}
在这种情况下,我如何应用策略模式?
发布于 2017-12-04 03:51:22
为什么不使用多态性呢?
创建一个接口:
interface Radio {
void modulate();
}
然后实现两个类:
FMRadio implements Radio{
public void demodule(){
//FM modulation
}
}
AMRadio implements Radio{
public void demodule(){
//AM modulation
}
}
然后,在你的主体中,你可以这样说:
Radio myRadio = new FMRadio();
myRadio.demodule();
发布于 2017-12-04 03:55:32
如果您可以有一个涵盖AM和FM解调合同的接口,则可以使用Strategy模式:
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
发布于 2017-12-04 04:04:23
为了使它成为一个合适的策略模式,我将在前面@Ladislav_M的回答中添加使用Context
类,它将包装和封装执行特定策略,并为代码提供更大的灵活性:
class Context {
private Radio radio;
public Context(Radio radio) {
this.radio = radio;
}
public Object runStrategy() {
radio.demodulate();
// do any other stuff you want
return ...
}
}
在main
中执行将变得更加方便:
Context context = new Context(new FmRadio());
Object result = context.runStrategy();
或者你可以内联上面的代码:
Object result = (new Context(new FmRadio())).runStrategy();
当然,您可以选择switch
块中的Radio
实现,并将其作为变量传递给Context
的构造函数。
https://stackoverflow.com/questions/47622493
复制相似问题