首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现适配器模式

实现适配器模式
EN

Stack Overflow用户
提问于 2015-10-06 11:18:58
回答 1查看 261关注 0票数 2

这些是我的.java类。我是否正确地实现了适配器模式?

接口播放

代码语言:javascript
复制
public interface Play {

  public void Tune(String Type,String Guitar);

}

advanceTuning接口

代码语言:javascript
复制
public interface AdvanceTuning {

  public void getSharp(String Guitar);
  public void getLowKey(String Guitar);

}

lowkeytuning.java

代码语言:javascript
复制
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

代码语言:javascript
复制
 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

代码语言:javascript
复制
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对象并调用它的方法();

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 11:58:10

我有几个建议:

移动此代码:

代码语言:javascript
复制
if(Type.equalsIgnoreCase("Sharp")){

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

变成某种工厂的方法。

代码语言:javascript
复制
static AdvanceTuning create(String string){
 if(Type.equalsIgnoreCase("Sharp")){

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

您的适配器,使它接受的不是字符串,而是AdvancedTune。然后,您将能够重用现有的曲调,如果不需要。那么构造函数就会像这样

代码语言:javascript
复制
public Adapter(AdvanceTuning aTune){
this.aTune=aTune;
}

然后您就可以通过adapter = new Adapter(create(type))创建适配器了。

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

但是总的来说,看看您的代码,它给我带来了一个问题:在您的情况下使用适配器的目的是什么?我看不出你能从中得到什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32968612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档