// ********** BridgeDemo.java ********** // Abstraction Hierarchy class Abstraction { private AbstractionIF absIF; public Abstraction(AbstractionIF absIF) { this.absIF = absIF; } protected AbstractionIF getAbstractionIF() { return absIF; } public void x() { absIF.x(); } } class SpecializedAbstractionA extends Abstraction { public SpecializedAbstractionA(SpecializedAbstractionAIF specAbsAIF) { super(specAbsAIF); } public void a() { ((SpecializedAbstractionAIF)getAbstractionIF()).a(); } } class SpecializedAbstractionB extends Abstraction { public SpecializedAbstractionB(SpecializedAbstractionBIF specAbsBIF) { super(specAbsBIF); } public void b() { ((SpecializedAbstractionBIF)getAbstractionIF()).b(); } } // Interface Hierarchy interface AbstractionIF { public void x(); } interface SpecializedAbstractionAIF extends AbstractionIF { public void a(); } interface SpecializedAbstractionBIF extends AbstractionIF { public void b(); } // Implementation Hierarchy 1 class AbstractionImpl1 implements AbstractionIF { public void x() {} } class SpecializedImplA1 extends AbstractionImpl1 implements SpecializedAbstractionAIF { public void a() {} } class SpecializedImplB1 extends AbstractionImpl1 implements SpecializedAbstractionBIF { public void b() {} } // Implementation Hierarchy 2 class AbstractionImpl2 implements AbstractionIF { public void x() {} } class SpecializedImplA2 extends AbstractionImpl2 implements SpecializedAbstractionAIF { public void a() {} } class SpecializedImplB2 extends AbstractionImpl2 implements SpecializedAbstractionBIF { public void b() {} } public class BridgeDemo { private static final int MAX = 100000; public static void main(String args[]) { long t1 = System.currentTimeMillis(); for (int i=0; i