如何设计不同对象的接口,以便在构建器设计模式中使用它们?

时间:2012-04-08 10:27:08

标签: oop design-patterns

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

//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...

}
}

1 个答案:

答案 0 :(得分:2)

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

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

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