Java 装饰设计模式——如何从多个接口继承
我目前正在开发一款类似Google T-Rex的游戏(你可以离线玩)。在我的整个设计过程中,我尽最大努力遵循装潢师的设计模式 (接口-->抽象类-->具体装饰器) 例如,一个具体的decorator类Java 装饰设计模式——如何从多个接口继承,java,decorator,Java,Decorator,我目前正在开发一款类似Google T-Rex的游戏(你可以离线玩)。在我的整个设计过程中,我尽最大努力遵循装潢师的设计模式 (接口-->抽象类-->具体装饰器) 例如,一个具体的decorator类dragon扩展了MoveableFigureBaseDecorator,它是也实现MoveableFigure的基本decorator类(因此,dragon类由MoveableFigure对象组成) 现在,具体的装饰程序云(见下文)应该具有静态图形和可移动图形的行为。但问题是,我必须在接口Stat
dragon
扩展了MoveableFigureBaseDecorator
,它是也实现MoveableFigure
的基本decorator类(因此,dragon类由MoveableFigure
对象组成)
现在,具体的装饰程序云
(见下文)应该具有静态图形
和可移动图形
的行为。但问题是,我必须在接口StaticFigure
中实现方法,即使它们已经在抽象装饰器staticFigureBasedEcator
中实现(此处未显示,但遵循与moveablefigurebasedecorator
中相同的模式。是否有方法克服此代码冗余?请注意moveablefigurebasedecorator
和StaticFigureBaseDecorator
未合并为一个的原因,因为某些类应该只具有一个而不具有一个的行为。)另一个
干杯
interface StaticFigure extends Figure{
//methodBToBeimplemented...
}
interface MoveableFigure extends Figure{
//methodAToBeimplemented...
}
public abstract class MoveableFigureBaseDecorator implements StaticFigure {
private MoveableFigure figure;
MoveableFigureBaseDecorator(MoveableFigure f){
//f is an instance of GameObject
figure = f;
}
@Override
void methodAToBeImplmented(){
f.methodAToBeImplemented();
}
//Have to re-implement methods from StaticFigure!
}
public class Cloud extends MoveableFigureBaseDecorator implements StaticFigure{
Cloud(MoveableFigure f){
//f is an instance of GameObject
super(f);
//Some method calls of parent class
}
}
public class GameObject implements MoveableFigure{
void methodAToBeImplmented(){ //implementation for this method }
}
“混凝土装饰云(见下文)应具有StaticFigure和MoveableFigure的行为”-这似乎不对。它是一个静态和可移动的图形吗?听起来像
MoveableFigure
和StaticFigure
共享一些共同的功能。MoveableFigure
应该源于StaticFigure
,如果这是您的目标,或者您需要定义一个由共享功能组成的新类型,并且注入它们。是的,我确实想要这两种行为……也许我给我的类命名有点不恰当。你是说movableFigure
应该只有这两种行为中的一种,这就证明了为什么它们不是“组合”的但是你也在说,MoveableFigure
应该同时具有这两种行为?或者仅仅是Cloud
应该同时具有这两种行为,而不是所有的MoveableFigure
实例都具有静态行为?如果是前者,就像所有的MoveableFigure都应该具有静态行为一样,那么MoveableFigure
应该继承bStaticFigure
的eHavior也一样;它们不能100%互不依赖,除非StaticFigure
具有MoveableFigure
不应具有的成员。