2012-03-12 202 views
4

我有一个接口IA。适配器B实现了该接口。 IZ是由X,YZ类实现的接口。 IA是一个接口,与我的应用程序通过该接口通过适配器B与X,Y和Z进行通信。 B包含IZ(适配器模式)的一个实例。现在来自适配器B,我想要访问X独有的功能,但是由于在适配器中它必然会与IZ接口,我怎样才能以clean的方式访问此功能?此外,适配器B中的IZ实例在运行时基于用户的某些手动活动来决定。有没有什么办法可以使用依赖注入来实例化适配器B中的IZ实例(我想避免使用新的运算符)?
IA
|
B(具有IZ的实例)扩展适配器模式

IZ
/| \
XYZ

编辑:有很高的机会X',Y',Z'可以进入图片...所有具有相同的接口IZ但Y'可能有一个方法(可能不与X相同)需要从B进行访问.Y'和X的唯一方法都将适应接口IA中的一些常用方法M我不能控制X,Y和Z或X',Y'和Y'。我不能控制X,Y和Z' ,Z'除了可以实现IZ接口外。但我有过IA和B.控制我使用的适配器模式本质上,使新课程能适应我的接口IA

+0

那么如果适配器B是用Y或Z而不是X的实例创建的,那么你会发生什么? – 2012-03-12 17:13:29

+0

返回某个常数东西 – r15habh 2012-03-12 17:16:49

+1

这听起来像你应该穿IZ更多的成员,然后 - 使Y和Z通过返回“不变的东西”实施这些成员并进行X做任何它通常意味着。 – 2012-03-12 17:19:04

回答

2

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

这听起来像你需要单独的适配器为不同的类型如果他们不通过一个共同的接口访问。由于您的描述听起来可能有很多常见的功能,因此您可以在适配器之间使用继承以避免代码重复。

您可能需要一个工厂,用于根据所调整对象的类型创建适配器。一个工厂也可以根据需要使用实例的X实例,Y,并为它所需的适配器,基于用户活动。