定义:
桥梁模式也称为桥接模式
将抽象和现实解耦,使得俩者可以独立的变化
角色:
- 抽象化角色:该角色抽象化的给出定义,并保存一个实现化对象的引用。
- 实现化角色:给出实现话接口,但是不给处具体的实现
- 修正抽象化角色:该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正
- 具体抽象化角色:对实现化角色接口种的方法进行具体实现
优点:
- 熟悉该原则对于理解面向对象设计原则,包括开闭原则都很有帮助,有助于形成正确的设计思路和培养良好的设计风格
- 抽象和现实分离,为了解决继承的缺点而提出的设计模式,在该模式下,实现可以不受抽象约束,不要绑定在一个固定的抽象层上
- 实现对客户透明,客户端不用关心细节的实现,他已经由抽象层通过聚合关系完成了封装。
- 提高灵活性和扩展性
使用场合:
- 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免俩个层次之间建立联系。
- 设计要求实现化角色的任何改变都不应该影响客户端,实现化角色的对客户端是完全透明的
- 一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合
- 不希望或者不适合使用继承的场合。若不能确定是否会发生变化,通过桥梁模式来解决
注意:
使用桥梁模式时主要考虑如何拆分抽象和实现,桥梁模式的意还是对变化的封装,尽量把可能变化的因素封装到最细,最小的逻辑单元中,避免风险扩散
实例:用不同的颜色画不同的形状
package 桥梁模式;
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color){
this.color = color;
}
public abstract void draw();
public abstract void setcolor(Color color);
}
package 桥梁模式;
public interface Color {
String getcolor();
}
package 桥梁模式;
public class Circle extends AbstractShape{
public Circle(Color color) {
super(color);
// TODO 自动生成的构造函数存根
}
@Override
public void draw() {
// TODO 自动生成的方法存根
System.out.println("用"+this.color.getcolor()+"画圆");
}
public void setcolor(Color color){
this.color = color;
}
}
package 桥梁模式;
public class Square extends AbstractShape{
public Square(Color color) {
super(color);
// TODO 自动生成的构造函数存根
}
@Override
public void draw() {
// TODO 自动生成的方法存根
System.out.println("用"+this.color.getcolor()+"画正方形");
}
public void setcolor(Color color){
this.color = color;
}
}
package 桥梁模式;
public class Red implements Color{
@Override
public String getcolor() {
// TODO 自动生成的方法存根
return "红色";
}
}
package 桥梁模式;
public class Green implements Color{
@Override
public String getcolor() {
// TODO 自动生成的方法存根
return "绿色";
}
}
package 桥梁模式;
public class Main {
public static void main(String []args){
Color redColor = new Red();
Color greenColor = new Green();
AbstractShape circle = new Circle(redColor);
circle.draw();
AbstractShape square = new Square(greenColor);
square.draw();
circle.setcolor(greenColor);
circle.draw();
square.setcolor(redColor);
square.draw();
}
}
用红色画圆
用绿色画正方形
用绿色画圆
用红色画正方形