版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34359363/article/details/82179807
桥接模式是什么?
桥接模式又称桥梁模式(BridgePattern),主要是为了实现抽象部分和现实部分脱耦,使他们各自可以独立的变化。
桥接模式的组成要素
- 抽象化角色(Abstraction):抽象化给出的定义,并保存一个对实现化对象的引用,就是图像类中的形状父类。
- 修正抽象化角色(RefinedAbstraction):扩展抽象化角色,改变和修正父类对抽象化的定义,比如形状下有正方形,圆形等图形。
- 实现化角色(Implementor):这个角色给出具体角色的接口,但是不给出具体的实现,这个接口不一定和抽象化角色的接口定义相同,实际上两者可以完全不一样,好比形状的颜色接口。
- 具体实现化角色(ConcreteImplementor):这个角色给出实现化角色接口的具体实现,好比各种具体的颜色。
桥接模式适用的场景
- 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
- 设计要求实现化角色的任何变化都不影响客户端,或者说实现化角色的改变对客户端是完全透明的。
- 一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。
简单例子一个
package myDesignPatternsTest.InferMode.BridgeModel;
/**
* 抽象汽车类
*/
public abstract class BrushCarAbstraction {
//颜色的引用
protected ImplementorColor impColor;
//具体汽车的实现
public abstract void carOperation();
public void SetImplementorColor(ImplementorColor color){
this.impColor=color;
}
}
/**
* 抽象颜色类
*/
public abstract class ImplementorColor {
public abstract String bepaint();
}
package myDesignPatternsTest.InferMode.BridgeModel;
//具体汽车类
public class BigCarRefinedAbstraction extends BrushCarAbstraction {
@Override
public void carOperation() {
System.out.println("Big and "+impColor.bepaint()+" car!");
}
}
package myDesignPatternsTest.InferMode.BridgeModel;
//具体颜色类
public class RedImplementorColor extends ImplementorColor {
@Override
public String bepaint() {
return "我是大红色";
}
}
package myDesignPatternsTest.InferMode.BridgeModel;
//客户来提车
public class Client {
public static void main(String[] args) {
BrushCarAbstraction a=new BigCarRefinedAbstraction();
ImplementorColor color=new RedImplementorColor();
a.SetImplementorColor(color);
a.carOperation();
}
}
我们来谈桥接模式的优缺点:
- 优点1:分离抽象接口及其实现部分
- 优点2:提高了系统的可扩充性,在两个变化的维度中任意扩展一个维度,都不需要改变原系统(我们可以生产好多红色的不同的汽车或者好多颜色的大汽车)
- 优点3:实现细节对客户透明,可以对用户隐藏实现细节
- 优点4:符合开闭原则和优先使用对象
- 缺点1:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行开发
缺点2:桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。
桥接模式和配适器模式的异同点
相同点:桥接模式和配适器模式都是让两个不同东西配合工作
不同点:配适器模式是改变已有的两个接口,让他们相容。
桥接模式是分离抽象和实现,使两者的接口可以不同,目的是分离。
所以说如果你有两个模块想让他们同时工作。那么你使用配适器。如果你什么都还没有,但是想分开实现,那么桥接是一个选择。桥接模式是现有桥,才有两边的东西,配适器是现有两边的东西 才有配适器的。