java设计模式—桥接模式
一.概述
将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.
二.应用场景
(1)如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
(2)抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。
(3)一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
(4)虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
(5)对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用
三.模式示例:
我们仍以惠普和联想打印机为例,在打印的功能上加上黑白或彩色打印,下面我们具体讲解桥接模式的实现过程。
1.创建打印机抽象类
public abstract class Printer {
Color color;
public void setColor(Color color){
this.color = color;
}
public abstract void print();
}
2.创建实现具体打印功能的惠普打印机类
public class HpPrinter extends Printer{
@Override
public void print() {
color.paint("惠普打印");
}
}
3.创建实现具体打印功能的联想打印机类
public class LenovoPrinter extends Printer{
@Override
public void print() {
color.paint("联想打印");
}
}
4.创建打印色彩抽象类
public interface Color {
public void paint(String printName);
}
5.创建黑白打印具体实现类
public class White implements Color{
@Override
public void paint(String printName) {
System.out.println(printName + "黑白");
}
}
6.创建彩色打印具体实现类
public class Colour implements Color{
@Override
public void paint(String printName) {
System.out.println(printName + "彩色");
}
}
7.模式调用
public class Test {
public static void main(String args[]){
Printer hp = new HpPrinter();
hp.setColor(new White());
hp.print();
hp.setColor(new Colour());
hp.print();
}
}