我正在做一个有一个名为service的类的模拟器,它有一行等待的客户端作为属性(这是一个Arraylist)。在模拟中,只有两个服务正在运行,但它们将拥有自己的客户类型。在某一点上,服务A可以帮助服务B,服务于B的客户。这就是问题所在:如何让一个服务访问B的客户行而不允许B访问A?
答案 0 :(得分:0)
您可以在班级中定义serviceType
州。因此,无论何时创建服务实例,都可以根据服务类型分配serviceType
。因此,当一个服务试图访问另一个服务的客户时,您可以检查serviceType
并决定是否允许他。
答案 1 :(得分:0)
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