桥接模式
什么是桥接模式:
非桥接模式:一幅画需要12种颜色,和粗,细,中三个型号,共计36支蜡笔(3*12=36个实体类)
桥接模式:一幅画需要12种颜色,和粗,细,中三个型号,共计3支毛笔,12中色料(3+12=15个实体类)
代码示例:
class Color
{
public String color;
}
class Red extends Color
{
public Red(){
this.color = "red";
}
}
class Blue extends Color
{
public Blue(){
this.color = "blue";
}
}
interface Brush
{
public abstract void Paint(Color c);
}
class BigBrush implements Brush
{
@Override
public void Paint(Color c)
{
System.out.println("Using big brush and color painting:"+c.color);
}
}
class smallBrush implements Brush
{
@Override
public void Paint(Color c) {
System.out.println("Useing small brush and color painting:"+c.color);
}
}
public class Demo
{
public static void main(String[] args)
{
Brush brush = new BigBrush();
brush.Paint(new Red());
brush.Paint(new Blue());
brush = new smallBrush();
brush.Paint(new Blue());
brush.Paint(new Red());
}
}
适配器 和 桥接模式的比较
适配器 | 桥接模式 | |
---|---|---|
1 | 已有两个接口,让其相容 | 分离抽象化和实现,使两者的接口不同。目的是分离 |
2 | 已有两个模块,让他们同时工作 | 先有桥,再有两端,想让其(毛笔,色料)分开实现,笔管粗细,色料管颜色。 |
适用情况:
1.一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合,虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计需求需要独立管理这两者。
2.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
3.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。