首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:访问资源和Demeter定律

Java:访问资源和Demeter定律
EN

Stack Overflow用户
提问于 2015-06-09 02:20:17
回答 7查看 707关注 0票数 16

概述

在我的(Android) Java游戏中,我有一个名为resources的类。顾名思义,这个类保存游戏的资源。我的所有OpenGL对象(精灵)都是在这里创建的

它看起来像下面这样(显然,与真实项目中的版本相比,这是一个简化的版本):

public class Resources {

    Hero hero;
    Enemy enemy;
    MenuButtons mainMenuButtons;
    Background background;
    Scene mainMenu;

    public void createObjects(){

        hero = new Hero();
        enemy = new Enemy();
        mainMenuButtons = new MenuButtons();
        background = new Background();
        mainMenu = new Scene(this);

    }
}

因此,在我的mainMenu场景中,我需要访问我的对象,因此我们可能会看到如下所示:

public class mainMenu implements Scene {

    Resources resources;

    public mainMenu(Resources resources){

        this.resources = resources;

    }

    @Override
    public void render(){

        resources.background.draw();
        resources.hero.draw();
        resources.enemy.draw();
        mainMenuButtons.draw();           

    }

    @Override
    public void updateLogic(){

        resources.hero.move();
        resources.enemy.move();
        resources.mainMenubuttons.animate();
    }

}

现在,上述方法只是访问资源中的对象及其方法的一种方式。但这真的违反了德米特的定律吗?如果没有,为什么不呢?如果是这样,那么以不违反LOD的方式访问这些对象的最佳方式是什么?

访问器-

一种选择(我已经排除了TBH -见下文)是将访问器方法放入我的资源类中。这样我就可以做一些类似的事情:

resources.drawBackround();

我有很多对象,每个对象的每个方法/变量都需要一个访问器。这并不实用,我似乎在编写大量的额外代码,最重要的是,它使得资源的类变得非常长,因为它充满了这些访问器。因此,我不会走这条路。

将对象传入场景的构造函数的

当然,我也可以这样做:

    hero = new Hero();
    enemy = new Enemy();
    mainMenuButtons = new MenuButtons();
    background = new Background();
    mainMenu = new Scene(hero, enemy, mainMenuButtons, background);

所以我可以简单地这样做:

    background.draw(); //etc....

这对于简单的场景是可行的(比如不需要很多对象的菜单系统),但是对于主游戏,它可能很快就会变得一团糟,因为我必须将对一些30+对象的引用传递到构造函数中,这听起来并不是很正确……

因此,如果有人能指出最好的继续进行的方式和原因,我将非常感激。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30716327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档