【发布时间】:2016-03-25 01:08:42
【问题描述】:
这些是我的 .java 类。我是否正确实现了适配器模式?
界面播放
public interface Play {
public void Tune(String Type,String Guitar);
}
advanceTuning 界面
public interface AdvanceTuning {
public void getSharp(String Guitar);
public void getLowKey(String Guitar);
}
lowkeytuning.java
public class LowKeyTuning implements AdvanceTuning{
@Override
public void getSharp(String Guitar) {
// TODO Auto-generated method stub
}
@Override
public void getLowKey(String Guitar) {
// TODO Auto-generated method stub
System.out.println(Guitar+": Guitar Tuned to LowKey");
}
}
Guitar.java
public class Guitar implements Play{
Adapter adapter;
@Override
public void Tune(String Type, String Guitar) {
// TODO Auto-generated method stub
if(Type.equalsIgnoreCase("Standard")){
System.out.println(Guitar+": Guitar Tuned to Standard");
}
else if(Type.equalsIgnoreCase("Sharp") || Type.equalsIgnoreCase("LowKey")){
adapter=new Adapter(Type);
adapter.Tune(Type, Guitar);
}
else{
System.out.println("No Such Tuning exists as "+Type);
}
}
}
Adapter.java
public class Adapter implements Play{
AdvanceTuning aTune;
public Adapter(String Type){
if(Type.equalsIgnoreCase("Sharp")){
aTune= new SharpTuning();
}
else if(Type.equalsIgnoreCase("LowKey")){
aTune= new LowKeyTuning();
}
}
@Override
public void Tune(String Type,String Guitar) {
// TODO Auto-generated method stub
if(Type.equalsIgnoreCase("Sharp")){
aTune.getSharp(Guitar);
}
else if(Type.equalsIgnoreCase("LowKey")){
aTune.getLowKey(Guitar);
}
}
}
SharpTuning.java 与 Lowkey.java 相同
我有一个 client.java 类,它创建一个 Guitar.java 对象并调用它的方法 Tune();
【问题讨论】:
-
我会将
AdvanceTuning的实例作为参数传递给Adapter构造函数,而不是传递一个字符串并“解析”它。 -
适配器通常用于将一个接口转换为另一个接口 (en.wikipedia.org/wiki/Adapter_pattern),您实现的看起来更像策略或装饰器模式。
-
@Thomas 好的,谢谢,我会尝试将其作为参数传递。
-
我也必须实施策略和装饰器。您能否验证一下这是哪种模式,以便我可以将此示例用作该模式
-
@Thomas 能否请您分享如何将高级调整实例传递给适配器构造函数的示例。
标签: java design-patterns adapter