我有一个对象说汽车有不同的方法来获得不同汽车制造商的汽车,例如奥迪,宝马,Merc等所有这些汽车类都没有任何常见的接口或抽象类,但有一些共同的属性,如车轮,刹车等。汽车对象有一种方法来识别应该使用哪种类型的制造商对象来提取属性。有谁能建议我从汽车对象中提取轮子的好方法?
public class Car {
public Audi getAudi() { return this.audi; }
public BMW getBMW() { return this.bmw; }
public Merc getMerc() { return this.merc; )
public String getMaker() { return this.maker; }
}
public class Audi {
public Wheel getWheel() { return this.wheel; }
public Brakes getBrakes() { return this.brakes; }
}
public class BMW {
public Wheel getWheel() { return this.wheel; }
public Brakes getBrakes() { return this.brakes; }
}
public class Merc{
public Wheel getWheel() { return this.wheel; }
public Brakes getBrakes() { return this.brakes; }
}
答案 0 :(得分:2)
首先,如果所有类都有相同的(逻辑)方法,它确实有一个接口,而不是正式接口,所以你的第一个任务就是实现一个所有类必须实现的正式接口。
或者你可以使用反射来获取所有方法并解析名称,但是这种方法很麻烦,而且容易出错(如果方法签名过于复杂,那就太可怕了。)
或者,您可以使您的Car类抽象化,并为GetWheel()
,GetBrakes()
等提供抽象方法。
此外,您似乎应该使用工厂模式来保存getAudi()
,getBMW()
,getMerc()
方法。哪个可以保存一个Car of Car实例(如果你正在使用单个实例)或者返回新实例(可以是匿名内部类而不是具体类),这取决于你想要实现的目标。