桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦.
Lock.java
package com.flyingh.ilock;
public interface Lock {
void lock();
void unlock();
}
LockA.java
package com.flyingh.lock;
import com.flyingh.ilock.Lock;
public class LockA implements Lock {
@Override
public void lock() {
// TODO Auto-generated method stub
System.out.println("LockA is locked!");
}
@Override
public void unlock() {
// TODO Auto-generated method stub
System.out.println("lockA is unlocked!");
}
}
LockB.java
package com.flyingh.lock;
import com.flyingh.ilock.Lock;
public class LockB implements Lock {
@Override
public void lock() {
// TODO Auto-generated method stub
System.out.println("LockB is locked!");
}
@Override
public void unlock() {
// TODO Auto-generated method stub
System.out.println("LockB is unlocked!");
}
}
Key.java
package com.flyingh.ikey;
public interface Key {
void openLock();
void closeLock();
}
KeyA.java
package com.flyingh.key;
import com.flyingh.ikey.Key;
import com.flyingh.ilock.Lock;
public class KeyA implements Key {
private Lock lock;
public KeyA(Lock lock) {
super();
this.lock = lock;
}
@Override
public void openLock() {
// TODO Auto-generated method stub
System.out.println("use KeyA to openLock");
lock.unlock();
}
@Override
public void closeLock() {
// TODO Auto-generated method stub
System.out.println("use KeyA to closeLock");
lock.lock();
}
}
KeyB.java
package com.flyingh.key;
import com.flyingh.ikey.Key;
import com.flyingh.ilock.Lock;
public class KeyB implements Key {
private Lock lock;
public KeyB(Lock lock) {
super();
this.lock = lock;
}
@Override
public void openLock() {
// TODO Auto-generated method stub
System.out.println("use KeyB to openLock");
lock.unlock();
}
@Override
public void closeLock() {
// TODO Auto-generated method stub
System.out.println("use KeyB to closeLock");
lock.lock();
}
}
Client.java
package com.flyingh.client;
import com.flyingh.ikey.Key;
import com.flyingh.ilock.Lock;
import com.flyingh.key.KeyA;
import com.flyingh.key.KeyB;
import com.flyingh.lock.LockA;
import com.flyingh.lock.LockB;
public class Client {
public static void main(String[] args) {
Lock lockA = new LockA();
Key keyA = new KeyA(lockA);
keyA.openLock();
keyA.closeLock();
System.out.println("*************");
Lock lockB = new LockB();
Key keyB = new KeyB(lockB);
keyB.openLock();
keyB.closeLock();
System.out.println("*************");
Key key = new KeyA(new LockB());
key.openLock();
key.closeLock();
}
}
程序运行结果如下:
use KeyA to openLock
lockA is unlocked!
use KeyA to closeLock
LockA is locked!
*************
use KeyB to openLock
LockB is unlocked!
use KeyB to closeLock
LockB is locked!
*************
use KeyA to openLock
LockB is unlocked!
use KeyA to closeLock
LockB is locked!