概念:
桥梁模式:将抽象解藕,使得这两个能独立的变化。桥梁模式也叫桥接模式。
实现:
定义材质
public interface Material { /** * 获取纸张 * @return 纸张类型 */ String getSheet(); }
材质的两种实现
public class A4 implements Material { @Override public String getSheet() { return "A4"; } } public class A8 implements Material { @Override public String getSheet() { return "A8"; } }
定义抽象类型的书
public abstract class AbstractBook { Material material; public AbstractBook(Material material){ this.material = material; } public abstract void materialInfo(); }
抽象书的两种实现
public class NovelBook extends AbstractBook { public NovelBook(Material material) { super(material); } @Override public void materialInfo() { System.out.println("小说都用"+material.getSheet()+"来制作。"); } } public class ToolBook extends AbstractBook { public ToolBook(Material material) { super(material); } @Override public void materialInfo() { System.out.println("工具书都是"+material.getSheet()+"制作的"); } }
测试与结果
测试
@Test public void bridgeTest(){ Material material = new A4(); AbstractBook novelBook =new NovelBook(material); novelBook.materialInfo(); AbstractBook toolBook =new ToolBook(material); toolBook.materialInfo(); material = new A8(); toolBook = new ToolBook(material); toolBook.materialInfo(); }
结果
小说都用A4来制作。
工具书都是A4制作的
工具书都是A8制作的
分析:
1.看着代码应该就很好理解,有没有一种感觉,抽象类是此岸,接口是彼岸。其实这个模式本来不常用到,有一种感觉就是给芭比娃娃换衣服,这就能有很多种搭配。但正常的逻辑一般都不需要反复来回搭配,都是一种固有的模式了。但有些还特定的场景还是能用到的。
2.可以看得出来,桥接模式有很强的可扩展性。
3.适用场景:
a.如果继承层级过多,可以使用这种模式打破继续继承的模式。
...
(这个平时不常用,所以就...)