2015-10-06 124 views
2

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

+0

我会'AdvanceTuning'的实例作为参数传递给'Adapter'构造函数,而不是传递一个字符串和“解析”它。 – Thomas

+0

通常使用适配器将一个接口转换为另一个接口(https://en.wikipedia.org/wiki/Adapter_pattern),实现的内容更像策略或修饰器模式。 – Thomas

+0

@Thomas好吧谢谢我会试着将它作为参数传递给它。 –

回答

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。那么如果需要,您将能够重新使用现有的曲调。 那么你的构造看起来像

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

那么你可以通过adapter = new Adapter(create(type))

,你也可以考虑删除的字符串常量,如SharpLowKey与枚举替换它们创建您的适配器。

但一般来说,看着你的代码,它给我带来了问题,你的情况使用适配器的目的是什么?我不能看到什么,你可以从它得到什么

+0

这只是我必须使用相同的示例来实现6个设计模式,这就是为什么即使没有必要使用适配器。 你有没有在你的头脑中可以实现工厂,适配器,门面,策略,decorater,轻量级模式的任何例子? –

+2

@MunaemRudab也许在这种情况下,你应该以不同的方式来解决这个问题。创建没有实现'Play'界面的'Guitar'类,并创建一个适配器,它可以让吉他具有“播放”功能, – user902383