Можно ли показать только определенный вид интерфейса или приблизить это поведение в Java?Например:
public interface SecureDevice
{
bool connectWith( SecureDevice d ); // visible to people who have a SecureDevice object
bool connectWith( SecureDevice d, Authentication a ); // somehow only visible to classes with permission
}
Я бы хотел, чтобы пользователи интерфейса SecureDevice не знали, что для взаимодействия требуется аутентификация или даже существует класс Authentication.Им не нужно знать детали.Им нужно только знать, что взаимодействие либо произошло, либо нет.Например, пользователь, получивший два объекта SecureDevice, может попробовать это:
public void establishConnection(SecureDevice d1, SecureDevice d2 )
{
Connector c = new Connector();
if( false == d1.connectWith( d2 ) )
{
System.out.println("Couldn't connect to directly");
}
else if ( false == c.connect( d1, d2 ) )
{
System.out.println("Couldn't connect using Connector.");
}
}
, но я мог бы определить класс следующим образом:
public class Computer implements SecureDevice
{
private Authentication auth;
public bool connectWith( SecureDevice d )
{
return d.connectWith(d, auth);
}
private? bool connectWith(SecureDevice d, Authorization a)
{
// check the authorization, do whatever it takes to connect, etc.
}
}
или аналогично
public class Connector
{
private Authentication myAuth;
public bool connect(SecureDevice a, SecureDevice b)
{
a.connectWith(b, myAuth);
}
}
Этот пример похож на друзей в C ++, но я чувствую, что он немного другой.Я не хочу давать специального разрешения на использование метода.
Я хотел бы иметь два интерфейса в составе SecureDevice:
public interface SecureDevice
{
public interface UserView
{
connectWith(SecureDevice d);
}
public interface LibraryView
{
connectwith(SecureDevice d, Authentication a);
}
}
Если бы действительно было два отдельных интерфейса, япришлось бы проводить между ними, когда я хотел бы использовать другой интерфейс, и я не смог бы гарантировать, что объект, реализующий один, фактически реализовал другой, поэтому мне пришлось бы выполнять проверку типов во время выполнения.
Итак, для простоты, я просто хочу представить пользователю простой интерфейс, содержащий только те методы, которые ему нужны, и ни одно из дел, в которых он не нуждается.Как я могу сделать (или приблизительный) это?
Спасибо