Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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_Decorator - Fatal编程技术网

Java 装饰设计模式——如何从多个接口继承

Java 装饰设计模式——如何从多个接口继承,java,decorator,Java,Decorator,我目前正在开发一款类似Google T-Rex的游戏(你可以离线玩)。在我的整个设计过程中,我尽最大努力遵循装潢师的设计模式 (接口-->抽象类-->具体装饰器) 例如,一个具体的decorator类dragon扩展了MoveableFigureBaseDecorator,它是也实现MoveableFigure的基本decorator类(因此,dragon类由MoveableFigure对象组成) 现在,具体的装饰程序云(见下文)应该具有静态图形和可移动图形的行为。但问题是,我必须在接口Stat

我目前正在开发一款类似Google T-Rex的游戏(你可以离线玩)。在我的整个设计过程中,我尽最大努力遵循装潢师的设计模式 (接口-->抽象类-->具体装饰器)

例如,一个具体的decorator类
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
应该继承b
StaticFigure
的eHavior也一样;它们不能100%互不依赖,除非
StaticFigure
具有
MoveableFigure
不应具有的成员。