繁体   English   中英

在对象上共享数据的最佳设计是什么?

[英]What is the best design for Sharing Data over the Objects?

我想在对象之间共享数据。 实际上,例如,有一个由水和个体组成的世界。 我希望个人能够使用水。 我看过如何转换Collection中的Individual表,或使Water成为Singleton,但实际上,最好的设计是什么? (我们可能在单个对象上有多个线程处理……因此我们可能需要一个线程安全的实现。)(此外,我想知道通过参数传递或实例化每个单个对象的Water,但这似乎不是最有效的实现(处理实例化)?...)

一个简单的对象集,用于解决问题(该集根本不共享Water,“个人”在此处显示为“ null”):

package myworld.testing;

public class World {

    static Water evolution;
    static Individual [] tribe;

    public World(){
        evolution=new Water();
    }
    public static Water getWater(){
        return evolution;
    }

    public static void main(String[] args) {
        evolution=new Water();
        System.out.println("info "+evolution.get());
        tribe = new Individual[10];
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }

        evolution=new Water("sprakly");
        System.out.println("info "+evolution.get());
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }

        evolution.set("salty");
        System.out.println("info "+evolution.get());
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }
    }

}

package myworld.testing;

public class Individual {
    int data;
    public Individual(){
        data=0;
    }
    public Individual(int i){
        data=i;
    }
    public void set(int i){
        data=i;
    }
    public int get(){
        return data;
    }
    public String toString(){
        return World.getWater().get()+" "+data;
    }
}

package myworld.testing;

public class Water {
    private static Water instance = null;
    String type;
    public static Water getInstance(){
        if(instance == null) {
             instance = new Water();
          }
          return instance;
    }
    public Water(){
        type="1";
    }
    public Water(String str){
        type=str;
    }
    public void set(String str){
        type=str;
    }
    public String get(){
        return type;
    }
}

非常感谢您的提前帮助和建议。 随时分享您的想法:)

遍历Individual s数组时获得null值的原因是,对于每个数组元素,您尚未创建实例,其引用将占据该实例。 实例化一个数组只会创建一个null指针的顺序存储块。 正确的解决方案是:

tribe = new Individual[10];
for(int i = 0; i < tribe.length; i++) {
    tribe[i] = new Individual();
}

在问候你对“个人访问了水,”这个问题你必须声明的封装例如WaterWorld公众知名度修饰符给予含包外访问所有类别World

鉴于“ Individual和“ World位于同一程序包中,因此不需要使用public修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM