桥接模式

意图

将抽象部分与其实现部分分离,使它们可以独立地变化。

桥接模式结构图:

整个图看起来像一座桥,其中,

  • Abstraction定义抽象类接口,维护一个指向Implementor类型对象的指针。
  • RefinedAbstraction扩充由Abstraction定义的接口。
  • Implementor定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction定义了基于这些操作的较高层次的操作。
  • ConcreteImplementor实现Implementor接口并定义它的具体实现。

 代码逻辑并不复杂,首先定义实现类的接口Implementor

package com.zlfan.bridge;

public interface Implementor {
	void operation();
}

接着它的两个实现子类

package com.zlfan.bridge;

public class ConcreteImplementorA implements Implementor {

	@Override
	public void operation() {		
		System.out.println("实现类A的operation方法");
	}

}
package com.zlfan.bridge;

public class ConcreteImplementorB implements Implementor {

	@Override
	public void operation() {		
		System.out.println("实现类B的operation方法");
	}

}

接下来是抽象层接口,维护了指向Implementor对象,并且在抽象层实现类扩展了新的方法extendOperation()

package com.zlfan.bridge;

public abstract class Abstraction {
	
	private Implementor implementor;
	
	public Abstraction(Implementor implementor){
		this.implementor = implementor;
	}
	
	public void operation(){
		implementor.operation();
	}
		
}

抽象层实现类,RefinedAbstraction

package com.zlfan.bridge;

public class RefinedAbstraction extends Abstraction{

	public RefinedAbstraction(Implementor implementor) {
		super(implementor);		
	}
	
	public void extendOperation(){
		System.out.println("这是抽象层扩展的方法");
	}

}

测试程序

package com.zlfan.bridge;

public class BridgeTest {

	public static void main(String[] args) {
		Implementor im = new ConcreteImplementorA();		
		Abstraction abstraction = new RefinedAbstraction(im);		
		abstraction.operation();
		RefinedAbstraction rfabstraction = new RefinedAbstraction(im);
		rfabstraction.extendOperation();
	}

}

运行结果输出

实现类A的operation方法
这是抽象层扩展的方法

可以看到,通过桥接模式,在分别在实现部分和抽象部分,可以独立的进行变化。即在Abstract和Implementor的实现类中可以根据需求来变化。

总结

使用场景:

系统有多维角度分类时,而每一种分类又有可能变化时,考虑使用桥接模式。

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
  • 类的抽象以及它的实现都应该可以生成子类的方法扩充。
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。
  • 有许多类要生成的类层次结构。
  • 想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

桥接模式的优点:实现了抽象和实现部分的分离。更好的可扩展性。可动态的切换实现。实现细节对客户端透明,可以对用户隐藏实现细节。

缺点:桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值