桥梁模式的用意是"将抽象化(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!