interface IDongle {
public abstract boolean connect();
}
abstract class DongleManager implements IDongle {
private boolean connected = false;
public void setConnected(boolean status) {
connected = status;
}
public boolean getConnected() {
return connected;
}
}
class SimulatedDongle extends DongleManager {
@Override
public boolean connect() {
System.
out.
println("Connceting with SimulatedDongle"); return true;
}
}
class RealDongle extends DongleManager {
@Override
public boolean connect() {
System.
out.
println("Connceting with RealDongle"); return true;
}
}
public class Main {
public static void main
(String[] args
) { DongleManager dongle = new SimulatedDongle();
dongle.getConnected();
dongle.connect();
dongle = new RealDongle();
dongle.getConnected();
dongle.connect();
}
}
aW50ZXJmYWNlIElEb25nbGUgewogICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gY29ubmVjdCgpOwp9CgphYnN0cmFjdCBjbGFzcyBEb25nbGVNYW5hZ2VyIGltcGxlbWVudHMgSURvbmdsZSB7CgogICAgcHJpdmF0ZSBib29sZWFuIGNvbm5lY3RlZCA9IGZhbHNlOwogICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGVkKGJvb2xlYW4gc3RhdHVzKSB7CiAgICAgICAgY29ubmVjdGVkID0gc3RhdHVzOwogICAgfQogICAgcHVibGljIGJvb2xlYW4gZ2V0Q29ubmVjdGVkKCkgewogICAgICAgIHJldHVybiBjb25uZWN0ZWQ7CiAgICB9Cn0KCmNsYXNzIFNpbXVsYXRlZERvbmdsZSBleHRlbmRzIERvbmdsZU1hbmFnZXIgewogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBjb25uZWN0KCkgewogICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmNldGluZyB3aXRoIFNpbXVsYXRlZERvbmdsZSIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9CgpjbGFzcyBSZWFsRG9uZ2xlIGV4dGVuZHMgRG9uZ2xlTWFuYWdlciB7CiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIGNvbm5lY3QoKSB7CiAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDb25uY2V0aW5nIHdpdGggUmVhbERvbmdsZSIpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgRG9uZ2xlTWFuYWdlciBkb25nbGUgPSBuZXcgU2ltdWxhdGVkRG9uZ2xlKCk7CiAgICAgICAgZG9uZ2xlLmdldENvbm5lY3RlZCgpOwogICAgICAgIGRvbmdsZS5jb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgZG9uZ2xlID0gbmV3IFJlYWxEb25nbGUoKTsKICAgICAgICBkb25nbGUuZ2V0Q29ubmVjdGVkKCk7CiAgICAgICAgZG9uZ2xlLmNvbm5lY3QoKTsKICAgIH0KfQ==