设计模式之罪 2-23 桥梁模式

桥接模式是一种设计模式,旨在将抽象部分与其实现部分分离,使它们可以独立地进行变化。本文详细介绍了桥接模式的概念、通用代码示例以及其在实际应用中的优点和适用场景。通过这种方式,桥接模式提供了更好的扩展性和实现了抽象与实现的解耦,允许两者独立演进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

桥梁模式,也叫桥接模式。其定义如下:
Decouple an abstract from its implementation so that the two can vary independently
将抽象和实现解耦,使得两者可以独立的变化

Abstraction +Operation() RefinedAbstraction Implementor +OperationImp() ConcreteImplementor +imp

桥梁模式的通用类图如上所示。由图可知,桥梁模式中有4个角色:

  • Abstraction - 抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
  • Implementor - 实现化角色:它是接口或者抽象类,定义角色必需的行为和属性。
  • RefinedAbstraction - 修正抽象化角色:它引用实现化角色对抽象化角色进行修正。
  • ConcreteImplementor - 具体实现化角色:它实现接口或抽象类定义的方法和属性。

桥梁模式核心:抽象角色引用实现角色,或者说抽象角色的部分实现是由实现角色完成的。

二、通用代码

1. 实现化角色

public interface Implementor {
	//基本方法
	public void doSomething();
	public void doAnything();
}

2. 具体实现化角色

public class ConcreteImplementor1 implements Implementor {
	public void doSomething(){ 
		//业务逻辑处理
	}
	public void doAnything(){ 
		//业务逻辑处理
	}
}
public class ConcreteImplementor2 implements Implementor {
	public void doSomething(){ 
		//业务逻辑处理
	}
	public void doAnything(){ 
		//业务逻辑处理
	}
}

3. 抽象化角色

public abstract class Abstraction {
	//定义对实现化角色的引用
	private Implementor imp;
	//约束子类必须实现该构造函数
	public Abstraction(Implementor _imp) {
		this.imp = _imp;
	}
	//自身的行为和属性
	public void request() {
		this.imp.doSomething();
	}
	//获得实现化角色
	public Implementor getImp() {
		return imp;
	}
}

4. 具体抽象化角色

public class RefinedAbstraction extends Abstraction {
	//覆写构造函数
	public RefinedAbstraction(Implementor _imp) {
		super(_imp);
	}
	//修正父类的行为
	@override
	public void request() {
		/*
		 * 业务处理...
		 */
		super.request();
		super.getImp().doAnything();
	}
}

5. 场景类

public class Client{
	public static void main(String[] args) {
		//定义一个实现化角色
		Implementor imp = new ConcreteImplementor1();
		//定义一个抽象化角色
		Abstraction abs = new RefinedAbstraction(imp);
		//执行行为
		abs.request();
	}
}

三、桥梁模式的应用

1. 桥梁模式的优点

  • 抽象和实现分离:解决了继承的缺点(强侵入性),在该模式下,实现可以不受抽象的约束,不用在绑定在一个固定的抽象层次上。
  • 优秀的扩充能力
  • 实现细节对客户透明

2. 桥梁模式的使用场景

  • 不希望或不适合使用继承的场景
  • 接口或抽象类不稳定的情景
  • 重用性要求较高的场景

3. 最佳实践

继承和桥梁模式的取舍:对于比较明确不发生变化的,则通过继承来完成;若不能确定是否会发生变化的,通过桥梁模式来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值