如何使同一类中的两个Java对象行为不同

如何使同一类中的两个Java对象行为不同,java,class,oop,Java,Class,Oop,我正在做一个模拟器,它有一个名为service的类,它有一行等待的客户机作为属性(这是一个Arraylist)。在模拟中,只有两个服务正在运行,但它们将拥有自己类型的客户。在某一点上,服务a可以帮助服务B,照顾B的客户。这就是问题所在:我如何让一个服务访问B的客户行,而不允许B访问A的客户行?您可以在类中定义一个serviceType状态。因此,无论何时创建服务实例,都可以根据服务的类型分配serviceType。因此,当一项服务试图接待另一项服务的客户时,您可以检查服务类型,并决定是否允许他。

我正在做一个模拟器,它有一个名为service的类,它有一行等待的客户机作为属性(这是一个Arraylist)。在模拟中,只有两个服务正在运行,但它们将拥有自己类型的客户。在某一点上,服务a可以帮助服务B,照顾B的客户。这就是问题所在:我如何让一个服务访问B的客户行,而不允许B访问A的客户行?

您可以在类中定义一个
serviceType
状态。因此,无论何时创建服务实例,都可以根据服务的类型分配
serviceType
。因此,当一项服务试图接待另一项服务的客户时,您可以检查
服务类型
,并决定是否允许他。

用户Stinepike提到的是一种可能性。根据您的实现,如果希望“访问控制列表”控制哪个实例可以访问当前类的属性,则可以维护一个列表:

public class Service{
    private ArrayList<Service> accessControl;
    private Customer customer;       

    public Service(){
        accessControl = new ArrayList<Service>();
    }

    public void grantAccessTo(Service s){
        accessControl.add(s);
    }

    public boolean hasAccess(Service s){
        accessControl.contains(s);
    }

    private Customer getCustomerByACL(Service s){
        if(hasAccess(s))
            return customer;
        else 
            //throw an exception or return null..
    }
}

A将如何与B互动?B会调用A上的方法,还是反之亦然?它将由dispatcher/3rd对象处理吗?关于这些对象是如何交互的,并没有足够的信息来提供一个可行的实现。尝试发布一些代码。
Service a = new Service();
Service b = new Service();  //b cannot access a
b.grantAccessTo(a);         //a can access b