将功能注入两个 classes 没有共同的 super class
Inject functionality into two classes without common super class
我知道我想做什么听起来很愚蠢但是听着:
我有抽象 classes Entity
和 Player
(扩展 Entity
)和非抽象 classes TestPlayer
(扩展Player
) 和 TestMob
(扩展 Entity
)。
现在我面临以下问题:
我想在 Entity
中实现一些抽象方法,在 TestPlayer
和 TestMob
中实现相同的功能。理论上我可以创建另一个 class TestEntity
(扩展 Entity
)并使 TestPlayer
和 TestMob
从它继承。但是 TestPlayer
不能再从 Player
继承了。
直接在 Entity
中实现该功能不是一种选择,因为并非所有子 class 都具有此功能。
除了重复代码之外,还有什么可以被视为可接受的解决方案?
不确定这是否是好的做法,但是如果 TestPlayer
和 TestMob
都持有对 TestEntity
的引用而不是从它继承并且在每个各自的方法中调用相应的方法怎么办TestEntity
里面的方法。 #CompositionOverInheritance
您也可以使用装饰器模式 (https://en.wikipedia.org/wiki/Decorator_pattern)。您有一个接口 Entity
和两个 类 实现它:ConcreteEntity
和 Decorator
,其中 ConcreteEntity
具有默认逻辑,Decorator
具有参考到 Entity
并委托所有方法调用。然后你可以扩展Decorator
。而不是 new TestPlayer()
,你有 new Player(new TestEntity(new ConcreteEntity)))
我知道我想做什么听起来很愚蠢但是听着:
我有抽象 classes Entity
和 Player
(扩展 Entity
)和非抽象 classes TestPlayer
(扩展Player
) 和 TestMob
(扩展 Entity
)。
现在我面临以下问题:
我想在 Entity
中实现一些抽象方法,在 TestPlayer
和 TestMob
中实现相同的功能。理论上我可以创建另一个 class TestEntity
(扩展 Entity
)并使 TestPlayer
和 TestMob
从它继承。但是 TestPlayer
不能再从 Player
继承了。
直接在 Entity
中实现该功能不是一种选择,因为并非所有子 class 都具有此功能。
除了重复代码之外,还有什么可以被视为可接受的解决方案?
不确定这是否是好的做法,但是如果 TestPlayer
和 TestMob
都持有对 TestEntity
的引用而不是从它继承并且在每个各自的方法中调用相应的方法怎么办TestEntity
里面的方法。 #CompositionOverInheritance
您也可以使用装饰器模式 (https://en.wikipedia.org/wiki/Decorator_pattern)。您有一个接口 Entity
和两个 类 实现它:ConcreteEntity
和 Decorator
,其中 ConcreteEntity
具有默认逻辑,Decorator
具有参考到 Entity
并委托所有方法调用。然后你可以扩展Decorator
。而不是 new TestPlayer()
,你有 new Player(new TestEntity(new ConcreteEntity)))