桥接模式
1.桥接分离实现和抽象,提高了灵活性,促进软件解耦,两层可以独立解耦。
2.桥接模式可以替换多次继承,从而减少子类的个数,降低系统的管理和维度成本。
3.桥接模式增加系统的理解和设计的难度,需要设计抽象和编程。
4.需要识别系统两个独立变化的维度,因此使用访问有一定限制。
分为:使用层,抽象层,实现层
其中所有层:对应的client类
抽象层:Abstrcut类和对应的子类,聚合了需要实现的接口,充当桥接的作用,连接客户端和实现类。
实现层:实现了具体接口的实现类
下面的例子就是使用不同品牌和类型的笔记本实现开关功能。
开关接口类
public interface INoteBook {
void open();
void close();
}
不同品牌的实现类
public class HuaWeiNoteBook implements INoteBook {
@Override
public void open() {
System.out.println("华为笔记本开启");
}
@Override
public void close() {
System.out.println("华为笔记本关闭");
}
}
抽象层类
public abstract class AbsNoteBook implements INoteBook{
private INoteBook iNoteBook;
public AbsNoteBook(INoteBook iNoteBook) {
this.iNoteBook = iNoteBook;
}
@Override
public void open() {
this.iNoteBook.open();
}
@Override
public void close() {
this.iNoteBook.close();
}
}
使用者 实现抽象层,实现直接的接口
public class BusinessNoteBook extends AbsNoteBook {
public BusinessNoteBook(INoteBook iNoteBook) {
super(iNoteBook);
}
@Override
public void close() {
super.close();
System.out.println("商务笔记关闭");
}
@Override
public void open() {
super.open();
System.out.println("商务笔记打开");
}
}
测试
public class BrideProxyTest {
public static void main(String[] args) {
GameNoteBook gameNoteBook = new GameNoteBook(new XiaoMiNoteBook());
gameNoteBook.close();
gameNoteBook.open();
}
}