一、前言
今天我们来学习java设计模式中的桥接模式,桥接模式是一种应用比较广泛的一种设计模式,这种设计模式将抽象与实现独立出来,使得我们的实现可以独立的变化。桥接模式是一种处理多维度变化的设计模式,最终达到多维度之间的解耦效果。比如说我们的画笔和纸就是一种多维度的关系,不同的画笔可以在不同的纸张上作画,通俗一点来说就是多对多的一种维度关系。桥接模式就是处理这种多维度关系的一种方式。
二、桥接模式
桥接模式的原理:将抽象部分与它的实现部分分离,使它们都可以独立地变化。具体的可以这样描述:桥接模式就像是一个通道,将多个不同的接口连接起来,桥接模式只操作接口,这样子就可以达到将多维度的抽象部分进行管理,而实现部分就可以独立变化的效果。桥接模式这种巧妙的处理方式将多个维度的继承结构独立出来,使得它们之间的变化互不影响。这种方式使得系统更加灵活,更容易扩展。所以桥接模式是一种我们非常值得学习的一种设计模式。
三.、代码展示
代码展示中,使用了画笔和纸的例子,我们将笔和纸这两个维度都抽取成两个接口,然后使用桥接的方式来管理这两个接口的关系,使笔和纸进行桥接。
3.1 接口
public interface Paper {
void usedPaperType();
}
/**
* 抽取一个画的行为
* * 这里将笔和纸进行桥接
* 两个维度都是抽象的,不同维度可以有不同的实现
* 这样子就做到了解耦的效果
* @author Deng
*
*/
public abstract class Pen {
protected Paper paper;
public Pen(Paper paper)
{
this.paper = paper;
}
abstract void draw();
}
3.2 接口实现
public class A4Paper implements Paper {
@Override
public void usedPaperType() {
// TODO Auto-generated method stub
System.out.println("在A4纸上");
}
}
public class XuanPaper implements Paper {
@Override
public void usedPaperType() {
// TODO Auto-generated method stub
System.out.println("在宣纸上");
}
}
public class Pencil extends Pen{
public Pencil(Paper paper) {
super(paper);
// TODO Auto-generated constructor stub
}
@Override
public void draw() {
// TODO Auto-generated method stub
paper.usedPaperType();
System.out.println("用铅笔画");
}
}
public class Brush extends Pen{
public Brush(Paper paper) {
super(paper);
// TODO Auto-generated constructor stub
}
@Override
public void draw() {
// TODO Auto-generated method stub
paper.usedPaperType();
System.out.println("用毛笔画");
}
}
3.4 结果
这种模式设计出来的效果就是我们可以接续扩展不同的笔和不同的纸,两个维度之间互不影响,使得系统之间的灵活性和扩展性都得到了提高,这是一个非常只得学习的设计模式哟
public class Test {
public static void main(String[] args) {
Paper paper = new XuanPaper();
Pen pen = new Brush(paper);
pen.draw();
Paper paper2 = new A4Paper();
Pen pen2= new Pencil(paper2);
pen2.draw();
}
}
在宣纸上
用毛笔画
在A4纸上
用铅笔画