首页 > 代码库 > 桥接模式Bridge

桥接模式Bridge

1.简介

      1)模式概述:当一个系统有多维度的变化时,将各个维度分离出来让它们独立于变化(多角度地分类实现对象),它们之间的耦合。即将抽象部分与实现部分分离,让抽象类和派生类各自实现自己的对象。它很好的符合了OCP和优先使用对象,从而避免了只用继承所造成的大量类的增加

      2)核心:将抽象化(Abstraction)与实现化(Implementation)解耦,用组合/聚合关系代替继承

              抽象化:将存在共性的多个实体当做一个实体对待,忽略多余信息

              实现化:抽象化给出的具体实现

              解耦:将存在于两个实体行为间的强关联去掉,即将抽象化和实现化之间的强关联变换为弱关联,达到解耦的目的。

2.UML与代码实现

       1)结构:UML

       结构:含有两个等级

              抽象化等级结构:由抽象化角色和修正抽象化角色组成

              实现化等级结构:由实现化角色和具体实现化角色组成

       模式组成:

              抽象化(Abstraction)角色:抽象化给出的定义,并保存一个队实现化对象的引用

              修正抽象化(RefinedAbstraction)角色:苦熬站抽象化角色,改变和修正父类对抽象化的定义

              实现化(Implementor)角色:给出实现化角色的接口,但不给出具体的实现。

              具体实现化(ConcreteImplementor)角色:给出实现化角色接口的具体实现

              (实现化角色只给出底层操作,而抽象化角色只给出基于底层操作的更高一层的操作。)

       2)java代码

public class Bridge{
	//客户端实现
	public static void main(String[]args)
	{
		Abstraction ab = new RefinedAbstraction();
		
		ab.SetImplementor(new ConcreteImplementorA());
		ab.Operation();
	
		ab.SetImplementor(new ConcreteImplementorB());
		ab.Operation();
	}
}
//Implementor类
abstract class Implementor
{
	public abstract void Operation();
}
//ConcreteImplementorA和ConcreteImplementorB等派生类
class ConcreteImplementorA extends Implementor
{
	public void Operation()
	{
		System.out.println("具体实现A的方法执行");
	}
}
class ConcreteImplementorB extends Implementor
{
	public void Operation()
	{
		System.out.println("具体实现B的方法执行");
	}
}
//Abstraction类
class Abstraction
{
	protected Implementor implementor;
	public void SetImplementor(Implementor implementor)
	{
		this.implementor=implementor;
	}
	public  void Operation()
	{
		implementor.Operation();
	}
}
//RefinedAbstraction类
class  RefinedAbstraction extends Abstraction
{
	public void Operation()
	{
		implementor.Operation();
	}
}

3.优点

       1)Bridge模式使对象间的组合关系解耦了抽象与实现之间固有的绑定关系,使得抽象和实现客运沿着各自的维度来变化

       2)Bridge模式有时候类似于多继承方案,但是多继承往往违背单一职责原则,复用性较差。它是比多继承方案更好的解决方法

       3)一般用在两个非常强的变化维度中,如果某个方向的变化维度并不强烈,则不一定要使用Bridge模式

4.应用

       1)一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次间建立静态的联系

       2)设计要求实现化角色的任何改变不影响客户端,即实现化角色的改变对客户端完全是透明的

       3)一个构件有多余一个抽象化角色和实现化角色,系统需要他们之间进行动态耦合

       4)系统中使用继承没有问题,但是抽象化角色和具体化角色需要独立变化,设计要求独立管理二者

5.其它相关模式

       1)装饰模式:为了减少子类的数目,避免出现复杂的继承关系,有两种模式可供选用:桥接模式、装饰模式。

       2)建造者模式:由对象的创建所带来的耦合性,可以用建造者模式解决,处理具体问题时可结合二者使用

小结

       桥接模式把两个角色之间的继承关系改为耦合关系,从而使二者可以各自独立的变化。把原来在基类的实现化细节抽象出来,再构造到一个实现化的结构中,然后把原来的基类改造成一个抽象化的等级结构,这样就实现了系统在多个维度上的独立变化

 

桥接模式Bridge