首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制或不复制

复制或不复制
EN

Stack Overflow用户
提问于 2016-03-23 19:39:50
回答 2查看 1.3K关注 0票数 0

我删除了以前的问题,因为它太复杂了。我正在创建一种多功能的数据驱动系统行为。因为我不能在需要的时候实时创建对象,所以我在程序开始时解析和存储它们。这些行为实际上是为它的所有者执行操作。

我可以复制这些行为并将所有者添加到其中。但我认为这是不必要的,这些行为可以作为模板。因此,每个具有相同行为的所有者都是指同一个对象。

当所有者经历事件时,行为可以激活。这就是行为具有OwnerListener的原因,当行为与事件兼容时,它将运行它的操作。

代码语言:javascript
复制
public class Behavior implements OwnerListener {
    List<Action> actions = new ArrayList<>();

    HashMap<String, Object> additionalData = new HashMap<>();

    public Behavior(XmlElement behaviorNode)
    {
        //Parse XML
    }

    @Override
    public void seeSomeone(Object someone) {
        //Since I need to run the actual greet action that was created by XML I need to store the person to greet.    
        additionalData.put("PERSON_SEEN", someone);

        for (Action action : actions)
        {
            //if action is compatible with seeing someone action.perform();

            //if that action actually needs the person it can take it from this behavior template additionalData.get("PERSON_SEEN");
        }
    }

    @Override
    public void getTalkedTo(Object talker) {
        additionalData.put("BEING_TALKED_TO", talker);

        for (Action action : actions)
        {
            //if action is compatible with being talked to action.perform();
        }
    }
}

现在,由于我有很多这样的行为,其中一些可能是巨大的(许多行动)。我真的不想每个主人都有一份副本。

瓶颈是额外的数据字段,因为这些操作在执行时需要访问特定的数据。它们还需要对所有者的访问,但也可以由每个侦听器方法中的数据字段提供。

这个问题比我想要的要长得多。我希望现在更清楚。我真的需要复制每个所有者的每一种行为,还是有其他方法?我的XML数据非常大,单个行为可以包含大量数据和数十个操作。会有“无止境”的行为数量,每个所有者都有可能拥有每一个行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-23 19:57:39

您需要维护多少数十亿个对象实例?

正如您已经说过需要存储所有者相关的数据一样,您可能不会期望得到更少的实例。

另一方面,实际代码已经由类实例共享,而不是对每个实例进行“复制”。因此,对象实例只使用它们的数据空间。

如果您用于设置各个实例和对象的XML配置在所有所有者中是“常量”的。您可以使用拆分实现。实例化所有者“已知”并使用相关XML初始化的对象,然后将该XML转发到一个工厂类,该工厂类维护类的XML代码特定实例,然后将该类用作本地实例,并在获取传入数据以供处理的“相同”行为的所有实例之间共享。当然,这些行为实例需要作为不可改变的对象来实现,以允许适当的共享。

票数 0
EN

Stack Overflow用户

发布于 2016-03-23 19:56:01

使用不可变的策略对象,这样您就可以共享它们。

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

https://stackoverflow.com/questions/36187266

复制
相关文章

相似问题

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