1 , 什么是bridgePattern??
主要是为了实现抽象部分和实现部分脱耦,使二者可以独立的变化
2 , 什么时候用呢?
1, 当开发过程中遇到
一个对象有两个纬度的变化,导致中纵横交错,难以维护
2,如果一个系统需要构建抽象化角色和具体化角色之间增加更多的灵活性 , 避免在两个层次之间建李静态的联系
3, 设计要求实现化角色的任何改变都不影响客户端 , 或者说实现化角色对客户端完全透明
4,一个构件有多于一个的抽象化和实现化的角色,系统需要他们进行动态耦合,虽然可以继承,但是需要两个角色都独立变化
看一下原理图
从图中我们可以看的出来
1 ) 分离的接口极其实现的部分, 实现了Abstraction和implementor的分离,这样的话就降低对实现部分的依赖2 ) 提高了可扩充性,可以独立的扩充 Abstraction和implementor, 调用的时候只需要implementor.operationImpl()
3,怎么用?
客户端代码
public class Client {
public static void main(String[] args) {
//大号毛笔画出红色
Brush bigBrush = new BigBrush();
bigBrush.setC(new Red());
bigBrush.paint();
//小号毛笔画出绿色
Brush smallBrush = new SmallBrush();
smallBrush.setC(new Green());
smallBrush.paint();
}
}
定义毛笔 内置颜色是全局变量 抽象的画画的行为
public abstract class Brush {
/**
* 颜色
*/
public Color c;
/**
* 画画
*/
public abstract void paint();
public Color getC() {
return c;
}
public void setC(Color c) {
this.c = c;
}
}
大号毛笔 传父类的颜色
public class BigBrush extends Brush {
@Override
public void paint() {
System.out.println("大号毛笔画出"+c.color);
}
}
小号毛笔 传父类的颜色
public class SmallBrush extends Brush {
@Override
public void paint() {
System.out.println("小号毛笔画出"+c.color);
}
}
颜色接口
public class Color {
public String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
颜色接口的实现
public class Blue extends Color {
public Blue() {
this.color = "蓝色";
}
}
public class Green extends Color {
public Green() {
this.color = "绿色";
}
}
public class Red extends Color {
public Red() {
this.color = "红色";
}
}
4 . 与适配器模式比较
共同点:
都是让两个东西配合工作
不同
出发点不同:
适配器: 改变已有的两个接口, 让他们
相容(先有两端的东西)
桥接:分离抽象化和实现,接口不同 目的是为了
分离(如果你什么都没有,要先去建桥,建完桥再去实现两边东西的变化)