![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1581693731217&di=05d555b1cff5bc7436d8238db6c64deb&imgtype=0&src=http%3A%2F%2Fpic.baike.soso.com%2Fp%2F20130603%2F20130603174025-201943070.jpg)
1、桥接模式介绍
2、解决问题
3、代码演示
4、类图示意
5、好处分析
6、弊端分析
7、最佳实现
8、现已经使用的场景
java设计模式7——桥接模式
1、桥接模式介绍
桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
2、解决问题
2.1、将复杂的组合设计问题转变为可以桥接的组合问题。如电脑的例子,电脑有类型和品牌,两者可以任意组合。
2.2、没有用设计模式时的示意图
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214201021450-983762005.png)
2.3、使用桥接模式后的示意图
将这个场景中的两个变化的维度分离,品牌和类型。两者通过桥接进行两两组合。
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214201247061-1001363893.png)
3、代码演示:
3.1、编写品牌的抽象类
package com.xgp.company.结构性模式.桥接模式;
/**
* 品牌类
*/
public interface Brand {
void info();
}
3.2、由抽象类诞生出品牌
苹果:
package com.xgp.company.结构性模式.桥接模式;
/**
* 苹果品牌
*/
public class Apple implements Brand {
@Override
public void info() {
System.out.print("苹果");
}
}
联想:
package com.xgp.company.结构性模式.桥接模式;
public class Laptop extends Computer {
public Laptop(Brand brand) {
super(brand);
}
@Override
protected void info() {
super.info();
System.out.println("笔记本");
}
}
3.3、电脑类型的抽象类
package com.xgp.company.结构性模式.桥接模式;
/**
* 抽象的电脑类型类
*/
public abstract class Computer {
//组合:品牌,电脑自带品牌
protected Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
protected void info() {
//自带品牌
brand.info();
}
}
3.4、由电脑类型的抽象类诞生实现类
台式电脑:
package com.xgp.company.结构性模式.桥接模式;
public class Desktop extends Computer {
public Desktop(Brand brand) {
super(brand);
}
@Override
protected void info() {
super.info();
System.out.println("台式机");
}
}
笔记本电脑:
package com.xgp.company.结构性模式.桥接模式;
public class Laptop extends Computer {
public Laptop(Brand brand) {
super(brand);
}
@Override
protected void info() {
super.info();
System.out.println("笔记本");
}
}
3.5、编写测试类,进行桥接
package com.xgp.company.结构性模式.桥接模式;
public class Test {
public static void main(String[] args) {
//苹果笔记本
Computer computer = new Laptop(new Apple());
computer.info();
//联想台式机
Computer computer12 = new Desktop(new Lenovo());
computer12.info();
}
}
输出结果:
苹果笔记本
联想台式机
4、类图示意:
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214202530329-1060015371.png)
5、好处分析:
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214202631810-1379709988.png)
6、弊端分析:
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214202910678-1319731986.png)
7、最佳实现
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214203106753-1039923452.png)
8、现已经使用的场景
![](https://img2018.cnblogs.com/blog/1729297/202002/1729297-20200214203122358-1950058842.png)