วิธีแก้ปัญหาเดียวที่อยู่ในใจของฉันคือการใช้วัตถุอ้างอิงกับสิ่งที่คุณต้องการใช้อินเทอร์เฟซที่หลากหลาย
เช่นสมมติว่าคุณมี 2 อินเทอร์เฟซที่จะใช้
public interface Framework1Interface {
void method(Object o);
}
และ
public interface Framework2Interface {
void method(Object o);
}
คุณสามารถใส่ไว้ในวัตถุ Facador สองชิ้น:
public class Facador1 implements Framework1Interface {
private final ObjectToUse reference;
public static Framework1Interface Create(ObjectToUse ref) {
return new Facador1(ref);
}
private Facador1(ObjectToUse refObject) {
this.reference = refObject;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Framework1Interface) {
return this == obj;
} else if (obj instanceof ObjectToUse) {
return reference == obj;
}
return super.equals(obj);
}
@Override
public void method(Object o) {
reference.methodForFrameWork1(o);
}
}
และ
public class Facador2 implements Framework2Interface {
private final ObjectToUse reference;
public static Framework2Interface Create(ObjectToUse ref) {
return new Facador2(ref);
}
private Facador2(ObjectToUse refObject) {
this.reference = refObject;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Framework2Interface) {
return this == obj;
} else if (obj instanceof ObjectToUse) {
return reference == obj;
}
return super.equals(obj);
}
@Override
public void method(Object o) {
reference.methodForFrameWork2(o);
}
}
ในที่สุดชั้นเรียนที่คุณต้องการควรเป็นอย่างไร
public class ObjectToUse {
private Framework1Interface facFramework1Interface;
private Framework2Interface facFramework2Interface;
public ObjectToUse() {
}
public Framework1Interface getAsFramework1Interface() {
if (facFramework1Interface == null) {
facFramework1Interface = Facador1.Create(this);
}
return facFramework1Interface;
}
public Framework2Interface getAsFramework2Interface() {
if (facFramework2Interface == null) {
facFramework2Interface = Facador2.Create(this);
}
return facFramework2Interface;
}
public void methodForFrameWork1(Object o) {
}
public void methodForFrameWork2(Object o) {
}
}
ตอนนี้คุณสามารถใช้เมธอด getAs * เพื่อ "เปิดเผย" ชั้นเรียนของคุณได้