设计模式(Java随笔)—桥接模式

桥接模式(Bridge Pattern):不常用的设计模式,为了继承的缺点而提出来的设计模式,在此模式下,实现可以不受抽象的约束,将实现独立出来,实现对用户透明,通过桥梁的关系,将实现细节与抽象层通过聚合关系完成封装

Decouple an abstraction from its implementation so that the two can vary independently.

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

桥接模式的四个角色:

  • 抽象化(Abstraction)角色:抽象化的给出定义,并保存一个对实现化对象的引用
  • 实现化(Implementor)角色:具体实现化角色的接口,但不给出具体的实现
  • 修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,并对抽象化角色进行修正
  • 具体实现化(ConcreteImplementor)角色:对实现化接口中的方法进行具体的实现

继承具有强入侵性质,而桥接模式是弱关联关系,因此对于比较明确不发生变化的,则可以通过继承来完成,若不能确定是否会发生变化,则通过桥接模式来完成

引用大话设计模式里的一句话来解释桥接模式就是:“实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合

桥接模式基础代码实现:

public class BridgeModel {
	/*
	 * 桥接模式——聚合关系
	 */
	public static void main(String[] args) {
		Abstraction ab;
		//抽象化角色A
		ab=new RefinedAbsA();
		ab.setImplementor(new ConcreteImpA());
		ab.operation();//具体实现A
		ab.setImplementor(new ConcreteImpB());
		ab.operation();//具体实现B
		//抽象化角色B
		ab=new RefinedAbsB();
		ab.setImplementor(new ConcreteImpA());
		ab.operation();//具体实现A
		ab.setImplementor(new ConcreteImpB());
		ab.operation();//具体实现B
	}
}

//实现化角色
interface Implementor {
	public void operation();
}

//具体实现化角色
class ConcreteImpA implements Implementor {
	@Override
	public void operation() {
		System.out.print("具体实现A+");
	}
}

class ConcreteImpB implements Implementor {
	@Override
	public void operation() {
		System.out.print("具体实现B+");
	}
}

//抽象化角色(内部有一个实现对象的引用)
abstract class Abstraction {
	//定义 实现对象 的引用
	private Implementor implementor;
	public void setImplementor(Implementor implementor) {
		this.implementor=implementor;
	}
	//具体的实现操作
	public  void operation() {
		implementor.operation();
	};
}
//修正抽象化角色
class RefinedAbsA extends Abstraction{
	public RefinedAbsA() {
		System.out.println("抽象化角色A--:");
	}
	public void operation() {
		super.operation();
		//修正业务代码
		System.out.println("修正具体实现业务代码");
	}
}
class RefinedAbsB extends Abstraction{
	public RefinedAbsB() {
		System.out.println("抽象化角色B--:");
	}
	public void operation() {
		super.operation();
		//修正业务代码
		System.out.println("修正具体实现业务代码");
	}
}

运行结果:

抽象化角色A--:
具体实现A+修正具体实现业务代码
具体实现B+修正具体实现业务代码
抽象化角色B--:
具体实现A+修正具体实现业务代码
具体实现B+修正具体实现业务代码

参考书籍:《大话设计模式》《设计模式(Java版)》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值