【问题标题】:How to make two Java objects from the same class behave differently如何使来自同一类的两个 Java 对象表现不同
【发布时间】:2018-04-30 00:56:59
【问题描述】:

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

【问题讨论】:

  • A 将如何与 B 交互? B 是否会调用 A 上的方法,反之亦然?它将由调度程序/第三个对象处理吗?没有足够的信息来说明这些对象如何交互来提供一个可行的实现。尝试发布您的一些代码。

标签: java class oop


【解决方案1】:

您可以在您的班级中定义serviceType 状态。因此,每当您创建服务实例时,您都会根据服务的类型分配serviceType。因此,当一个服务试图为另一个服务的客户服务时,您可以查看serviceType 并决定是否允许他。

【讨论】:

    【解决方案2】:

    用户 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..
        }
    }
    

    使用列表:

    Service a = new Service();
    Service b = new Service();  //b cannot access a
    b.grantAccessTo(a);         //a can access b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2023-03-10
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多