Как заставить два объекта Java из одного класса вести себя по-разному - PullRequest
0 голосов
/ 30 апреля 2018

Я занимаюсь симулятором с классом, называемым service, в котором в качестве атрибута есть ряд ожидающих клиентов (который является Arraylist). В симуляции работают только две службы, но у них будет свой тип клиента. В определенный момент служба A может помочь службе B, обслуживая клиентов B. Вот в чем проблема: как я могу сделать так, чтобы одна служба обращалась к ряду клиентов B, не позволяя B получать доступ к A?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

То, что упомянул пользователь 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
0 голосов
/ 30 апреля 2018

Вы можете определить состояние serviceType в вашем классе. Поэтому, когда вы создаете экземпляр службы, вы присваиваете serviceType в зависимости от типа службы. Поэтому, когда одна служба пытается посетить клиента другой службы, вы можете проверить serviceType и решить, разрешить ему или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...