1

我至少有两个不同的类,如下所示:

//NOTE : these two classes have getter and setter also
class Artist {

String artistName;
String artistWebsite;
String artistDbpedia;
String artistImage;
List<String> astistAlbumsName;
List<String> astistAlbumsUrl;
}

class Venu {
String VenuName;
String VenuWebsite;
String VenuDbpdia;
String VenuImage;
String VenuDescription;
List<String> venuFans;
}

我想要一个生产者类来获取一个 xml 文件作为输入并检测 xml 的类型(venu/artist),然后开始根据输入创建一个产品对象。

问题 :

我想创建一个接口来聚合上述两个类之间的相似性,所以我的接口是:

interface Model {
public String getImage();
public String getName();
public String getWebsite();
public String getdbpedia();
}

然后我可以在我的构建器类和以上两个类中实现这个接口,但是那些不同的方法呢?

比如getVenuFans / getArtistAlbumName / etc....?

我怎样才能从我的制片人那里打电话给他们?

这是我的建设者:

Class Builder implements Model {
public String getImage(){}
public String getName(){}
public String getWebsite(){}
public String getdbpedia(){}
}

这可以是我的制片人:

Class Producer {
public Producer()
{
Builder b = null;
//assume Venu and Artist implements Model
b = (Builder) new Venu();
//I don't have access to getVenuFans()!

b = (Builder) new Artist();
//I don't have access to getArtistAlbumsName() / etc...

}
}
4

1 回答 1

2

您无权访问这些方法,因为您将对象强制转换为 Builder,而 Builder 没有这些方法。

我明白你在做什么,但我认为它不会奏效。例如,getVenueFans(我假设您的意思是场地)仅适用于 Venue 类。尝试将其抽象为其他非 Venue 类将实现的接口是没有意义的。

我认为您所拥有的很好:您已将常用方法抽象为接口。要调用 Venue 和 Artist 上的方法,消费代码需要将对象转换为适当的类型,然后调用其上的方法。这并不像你想象的那么糟糕。消费代码知道它正在处理什么类型(否则,它为什么会尝试调用 getVenueFans?),所以这就是直接强制转换和调用方法的意义所在。

于 2012-04-08T22:40:07.367 回答