Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何为不同的对象设计一个界面,以便在构建器设计模式中使用它们?_Oop_Design Patterns - Fatal编程技术网

Oop 如何为不同的对象设计一个界面,以便在构建器设计模式中使用它们?

Oop 如何为不同的对象设计一个界面,以便在构建器设计模式中使用它们?,oop,design-patterns,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; } cl

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

//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;
}
然后我可以在我的builder类和以上两个类中实现这个接口,但是这些不同的方法呢

比如getVenuFans/getArtistAlbumName/等等

我如何从制片人那里打电话给他们?

这是我的建筑商:

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

}
}

您无权访问这些方法,因为您正在将对象强制转换到生成器,而生成器没有这些方法

我知道你想做什么,但我认为这行不通。例如,getVenueFans(我假设您指的是场地)仅适用于场地类。尝试将其抽象为其他非场馆类将实现的接口是没有意义的

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

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

}
}