Bridge

桥梁模式的用意是"将抽象化(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!
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值