实现适配器模式

时间:2015-10-06 11:18:58

标签: java design-patterns adapter

这些是我的.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();

1 个答案:

答案 0 :(得分:0)

我有一些建议:

移动此代码:

if(Type.equalsIgnoreCase("Sharp")){

        aTune= new SharpTuning();
    }
    else if(Type.equalsIgnoreCase("LowKey")){
        aTune= new LowKeyTuning();
    }

进入某种工厂方法。

static AdvanceTuning create(String string){
 if(Type.equalsIgnoreCase("Sharp")){

            return new SharpTuning();
        }
        else if(Type.equalsIgnoreCase("LowKey")){
return new LowKeyTuning();
        }
}

你的适配器,让它接受不是字符串,但是AdvancedTune。那么你将能够重用现有的曲调,如果nessesery。 那么你的构造函数看起来就像那样

public Adapter(AdvanceTuning aTune){
this.aTune=aTune;
}

然后您可以通过adapter = new Adapter(create(type))

创建适配器

您还可以考虑删除字符串常量,例如SharpLowKey,并将其替换为枚举。

但总的来说,看一下你的代码,它给我带来了一个问题,在你的情况下使用适配器的目的是什么?我无法看到你从中获得的任何东西