一、桥接模式概念
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分,如果用继承方式,m种形状和n种颜色的图形就有mxn种,不但对应的子类很多,而且扩展困难。
设想如果要绘制地形、圆、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颤色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:
第一种设计方案是为每一种形状都提供一套各种颜色的版本
这两种方法明显比较复杂,不易扩展。
下面我们看看桥接模式
这种方式看起来就很不错,想加一种颜色还是图形都比较方便哈哈哈。
二、接下面我们看代码解析
1、我们先创建一个属于颜色的接口
public interface Color{
public void print();
}
2、我们创建各种颜色实现颜色接口
public interface Gray implements Color{
public void print(){
System.out.println("这是灰色")
}
}
public interface Red implements Color{
public void print(){
System.out.println("这是红色")
}
}
3、颜色创建好了,我们现在创建一个图形的抽象类,用来引用颜色类
public abstract class Shape{
private Color color;
public Color getColor(){
return color;
}
public void setColor(Color color){
this.color=color;
}
public Shape(Color color){
super();
this.color=color;
}
//打印形状
public abstract void show();
}
4、创建一个图形实现类
public class Circle extents Shape{
public Circle(Color color){
super(color);
}
public void show(){
System.out.println("圆形");
this.getColor().print();
}
}
5、好了,接下来我们测试一下
public class Test{
Color red=new Red();
Color gray=new Gray();
Shape circle=new Circle(red);
circle.show();
}
6、运行结果:
圆形
这是红色
三、桥接模式的优缺点
优点
1)分离抽象接口极其实现部分。
2)桥接模式有时类似于多继承方素,但是多继承方案违背了类的单一职责原则(即一
个类只有一个变化的原因),复用性比较差,而且多继承结构中类的个数非常庞大,
桥接模式是比多继承方案重好的解决方法。
3)桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要
修改原有系统。
缺点
1)桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。