Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Java 扩展适配器模式_Java_Oop_Design Patterns_Adapter - Fatal编程技术网

Java 扩展适配器模式

Java 扩展适配器模式,java,oop,design-patterns,adapter,Java,Oop,Design Patterns,Adapter,我有一个接口IA。适配器B实现该接口IZ是由X、Y和Z类实现的接口。IA是一个接口,我的应用程序使用适配器与X、Y和Z进行通信。B包含IZ(适配器模式)的实例。现在从适配器B,我想访问X独有的功能,但由于在适配器中它绑定到接口IZ,我如何以干净的方式访问此功能?适配器B中的IZ实例也是根据用户的一些手动活动在运行时决定的。是否有任何方法可以使用依赖项注入在适配器B中实例化IZ的实例(我希望避免使用新操作符)? IA | B(有一个IZ实例) IZ /\ X Y Z 编辑:X',Y',Z'很有可能

我有一个接口IA。适配器B实现该接口IZ是由XYZ类实现的接口。IA是一个接口,我的应用程序使用适配器与X、Y和Z进行通信。B包含IZ(适配器模式)的实例。现在从适配器B,我想访问X独有的功能,但由于在适配器中它绑定到接口IZ,我如何以干净的方式访问此功能?适配器B中的IZ实例也是根据用户的一些手动活动在运行时决定的。是否有任何方法可以使用依赖项注入在适配器B中实例化IZ的实例(我希望避免使用新操作符)?
IA
|
B(有一个IZ实例)

IZ
/\
X Y Z

编辑:X',Y',Z'很有可能出现在图片中…都具有相同的接口IZ,但Y'可能有一种方法(可能与X不同)需要从B访问。Y'和X的独特方法都将适应接口IA中的一些常用方法M


我不能控制X,Y和Z或X',Y',Z',除了它们可以实现IZ接口。但我可以控制IA和B。我基本上使用了适配器模式,这样新类就可以适应我的接口IA

如果您的类
B
想要访问
X
的公共接口的一部分,而该部分未通过
IZ
公开,那么它就不再只是
IZ
接口的适配器

在我看来,如果不同类型的适配器不是通过公共接口访问的,那么它们需要单独的适配器。因为从您的描述听起来可能有很多通用功能,所以您可以在适配器之间使用继承来避免代码重复


您可能需要一个工厂来根据要调整的对象的类型创建适配器。工厂还可以根据用户的活动来实例化
X
Y
&c的实例,以及它所需的适配器。

如果适配器B是用Y或Z的实例创建的,那么您希望发生什么,代替X?听起来你应该在IZ上放更多的成员,然后-让Y和Z通过返回“常量”来实现这些成员,并让X做它通常打算做的任何事情。X',Y',Z'很有可能出现在图片中…所有这些都具有相同的接口,但Y'可能有一个方法(可能与X不同)这需要从B访问。Y'和X的独特方法都将适应界面Ia中的一些常用方法M。对于任何人来说,要给出一个有用的答案都是非常困难的,因为这样的要求是零零星星的。我建议你考虑一下你能表达的关于这个问题的一切,并对它进行编辑。我已经编辑了这个问题,请注意,我不能控制X,Y和Z或者X',Y',Z',除了它们可以实现IZ接口之外。但我可以控制IA和B。我基本上使用了适配器模式,以便新类可以适应我的接口IA